{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "1aad18df",
   "metadata": {},
   "source": [
    "# 目标  \n",
    "可以区分网页上的图片是广告还是正常网页内容  \n",
    "UCI发布的一个互联网广告数据集，总共包含3279张图片。  \n",
    "其中2820张为正常网页内容，459张为广告。每个样本包含1558个特征。  \n",
    "其中包含3个连续特征，分别为height、width和ratio，其他均为二值特征。  \n",
    "样本还有一个字段用于标明该样本是否为广告（ad.—广告，nonad.—非广告）。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2ffd2a5b",
   "metadata": {},
   "source": [
    "# 数据分析"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2a3439b0",
   "metadata": {},
   "source": [
    "导入库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "670124c3",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.model_selection import train_test_split\n",
    "from  sklearn.metrics import roc_auc_score\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "from bayes_opt import  BayesianOptimization"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b44d8a2b",
   "metadata": {},
   "source": [
    "加载数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "03e49a2a",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py:3165: DtypeWarning: Columns (3) have mixed types.Specify dtype option on import or set low_memory=False.\n",
      "  has_raised = await self.run_ast_nodes(code_ast.body, cell_name,\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>125</th>\n",
       "      <th>125.1</th>\n",
       "      <th>1.0</th>\n",
       "      <th>1</th>\n",
       "      <th>0</th>\n",
       "      <th>0.1</th>\n",
       "      <th>0.2</th>\n",
       "      <th>0.3</th>\n",
       "      <th>0.4</th>\n",
       "      <th>0.5</th>\n",
       "      <th>...</th>\n",
       "      <th>0.1532</th>\n",
       "      <th>0.1533</th>\n",
       "      <th>0.1534</th>\n",
       "      <th>0.1535</th>\n",
       "      <th>0.1536</th>\n",
       "      <th>0.1537</th>\n",
       "      <th>0.1538</th>\n",
       "      <th>0.1539</th>\n",
       "      <th>0.1540</th>\n",
       "      <th>ad.</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>57</td>\n",
       "      <td>468</td>\n",
       "      <td>8.2105</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>ad.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>33</td>\n",
       "      <td>230</td>\n",
       "      <td>6.9696</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>ad.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>60</td>\n",
       "      <td>468</td>\n",
       "      <td>7.8</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>ad.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>60</td>\n",
       "      <td>468</td>\n",
       "      <td>7.8</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>ad.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>60</td>\n",
       "      <td>468</td>\n",
       "      <td>7.8</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>ad.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3273</th>\n",
       "      <td>170</td>\n",
       "      <td>94</td>\n",
       "      <td>0.5529</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>nonad.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3274</th>\n",
       "      <td>101</td>\n",
       "      <td>140</td>\n",
       "      <td>1.3861</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>nonad.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3275</th>\n",
       "      <td>23</td>\n",
       "      <td>120</td>\n",
       "      <td>5.2173</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>nonad.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3276</th>\n",
       "      <td>?</td>\n",
       "      <td>?</td>\n",
       "      <td>?</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>nonad.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3277</th>\n",
       "      <td>40</td>\n",
       "      <td>40</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>nonad.</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>3278 rows × 1559 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       125  125.1     1.0  1  0  0.1  0.2  0.3  0.4  0.5  ...  0.1532  0.1533  \\\n",
       "0       57    468  8.2105  1  0    0    0    0    0    0  ...       0       0   \n",
       "1       33    230  6.9696  1  0    0    0    0    0    0  ...       0       0   \n",
       "2       60    468     7.8  1  0    0    0    0    0    0  ...       0       0   \n",
       "3       60    468     7.8  1  0    0    0    0    0    0  ...       0       0   \n",
       "4       60    468     7.8  1  0    0    0    0    0    0  ...       0       0   \n",
       "...    ...    ...     ... .. ..  ...  ...  ...  ...  ...  ...     ...     ...   \n",
       "3273   170     94  0.5529  0  0    0    0    0    0    0  ...       0       0   \n",
       "3274   101    140  1.3861  1  0    0    0    0    0    0  ...       0       0   \n",
       "3275    23    120  5.2173  1  0    0    0    0    0    0  ...       0       0   \n",
       "3276     ?      ?       ?  1  0    0    0    0    0    0  ...       0       0   \n",
       "3277    40     40     1.0  1  0    0    0    0    0    0  ...       0       0   \n",
       "\n",
       "      0.1534  0.1535  0.1536  0.1537  0.1538  0.1539  0.1540     ad.  \n",
       "0          0       0       0       0       0       0       0     ad.  \n",
       "1          0       0       0       0       0       0       0     ad.  \n",
       "2          0       0       0       0       0       0       0     ad.  \n",
       "3          0       0       0       0       0       0       0     ad.  \n",
       "4          0       0       0       0       0       0       0     ad.  \n",
       "...      ...     ...     ...     ...     ...     ...     ...     ...  \n",
       "3273       0       0       0       0       0       0       0  nonad.  \n",
       "3274       0       0       0       0       0       0       0  nonad.  \n",
       "3275       0       0       0       0       0       0       0  nonad.  \n",
       "3276       0       0       0       0       0       0       0  nonad.  \n",
       "3277       0       0       0       0       0       0       0  nonad.  \n",
       "\n",
       "[3278 rows x 1559 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_0 = pd.read_csv('./ad.data',error_bad_lines=False) \n",
    "data_0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "6267cf51",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py:3165: DtypeWarning: Columns (3) have mixed types.Specify dtype option on import or set low_memory=False.\n",
      "  has_raised = await self.run_ast_nodes(code_ast.body, cell_name,\n"
     ]
    }
   ],
   "source": [
    "data = pd.read_csv('./ad.data',header = None,error_bad_lines=False) \n",
    "# 数据文件并不包含表头，因此将header置为None，此处通过设置参数error_bad_lines忽略无效数据。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "9d95e008",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>...</th>\n",
       "      <th>1549</th>\n",
       "      <th>1550</th>\n",
       "      <th>1551</th>\n",
       "      <th>1552</th>\n",
       "      <th>1553</th>\n",
       "      <th>1554</th>\n",
       "      <th>1555</th>\n",
       "      <th>1556</th>\n",
       "      <th>1557</th>\n",
       "      <th>1558</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>125</td>\n",
       "      <td>125</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>ad.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>57</td>\n",
       "      <td>468</td>\n",
       "      <td>8.2105</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>ad.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>33</td>\n",
       "      <td>230</td>\n",
       "      <td>6.9696</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>ad.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>60</td>\n",
       "      <td>468</td>\n",
       "      <td>7.8</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>ad.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>60</td>\n",
       "      <td>468</td>\n",
       "      <td>7.8</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>ad.</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 1559 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   0     1       2    3     4     5     6     7     8     9     ...  1549  \\\n",
       "0   125   125     1.0    1     0     0     0     0     0     0  ...     0   \n",
       "1    57   468  8.2105    1     0     0     0     0     0     0  ...     0   \n",
       "2    33   230  6.9696    1     0     0     0     0     0     0  ...     0   \n",
       "3    60   468     7.8    1     0     0     0     0     0     0  ...     0   \n",
       "4    60   468     7.8    1     0     0     0     0     0     0  ...     0   \n",
       "\n",
       "   1550  1551  1552  1553  1554  1555  1556  1557  1558  \n",
       "0     0     0     0     0     0     0     0     0   ad.  \n",
       "1     0     0     0     0     0     0     0     0   ad.  \n",
       "2     0     0     0     0     0     0     0     0   ad.  \n",
       "3     0     0     0     0     0     0     0     0   ad.  \n",
       "4     0     0     0     0     0     0     0     0   ad.  \n",
       "\n",
       "[5 rows x 1559 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head() # 查看数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "ab73b080",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3279, 1559)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8582d4be",
   "metadata": {},
   "source": [
    "数据加载完毕后，可通过data.shape查看数据集的大小。可以看到，数据集包含3279个样本，共1559个字段，和数据集描述是一致的。     \n",
    "因为数据不包含表头，因此默认以数字索引作为列名。  \n",
    "为了后续处理方便，将数据集中的0～2、1558列分别用height、width、ratio（width/height）和label作为列名。  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "5315e818",
   "metadata": {},
   "outputs": [],
   "source": [
    "data.rename(columns={0:'height',1:'width',2:'ratio(width/height)',1558:'label'},inplace=True)\n",
    "data = data.replace('[?]',np.nan,regex = True) # 数据集中缺失值以“?”表示，此处将其替换为np.nan。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "02f52071",
   "metadata": {},
   "source": [
    "### 数据值缺失\n",
    "当缺失比例很小时，可直接对缺失记录进行舍弃或手工处理。  \n",
    "当缺失数据占有一定比例时，可以采取如特殊值填充、平均值填充等方法进行填充。  \n",
    "因为XGBoost本身实现了对缺失值的处理算法，此处缺省值不再进行填充处理。因为某些包含“?”的列的字段类型为object（可通过dtypes查看），\n",
    "为方便处理，将其转化为float"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "a8ae1b58",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "height:903\n",
      "width:901\n",
      "ratio(width/height):910\n",
      "3:15\n"
     ]
    }
   ],
   "source": [
    "results = data.iloc[:,:].isnull().sum()\n",
    "null_columns = []\n",
    "for index,value in results.iteritems():\n",
    "    if value != 0:\n",
    "        print(\"{}:{}\".format(index,value))\n",
    "        null_columns.append(index)\n",
    "data[null_columns] = data[null_columns].astype('float')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6daa224f",
   "metadata": {},
   "source": [
    "目前数据集label字段取值为ad.和nonad.，分别表示样本为广告和非广告，将其转化为1和0表示"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "9065cb35",
   "metadata": {},
   "outputs": [],
   "source": [
    "data.label = data.label.replace(['ad.','nonad.'],[1,0])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "87550123",
   "metadata": {},
   "source": [
    "将数据集划分为训练集和测试集，此处采用4:1的划分比例"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "efc64bed",
   "metadata": {},
   "outputs": [],
   "source": [
    "mask = np.random.rand(len(data)) < 0.8  # 生成一个随机数并选择小于0.8的数据\n",
    "train = data[mask]\n",
    "test = data[~mask]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bb775844",
   "metadata": {},
   "source": [
    "为了更准确地理解数据，我们通过train.describe（）对特征进行简单的统计计算。代码如下："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "1aa441c7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>height</th>\n",
       "      <th>width</th>\n",
       "      <th>ratio(width/height)</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>...</th>\n",
       "      <th>1549</th>\n",
       "      <th>1550</th>\n",
       "      <th>1551</th>\n",
       "      <th>1552</th>\n",
       "      <th>1553</th>\n",
       "      <th>1554</th>\n",
       "      <th>1555</th>\n",
       "      <th>1556</th>\n",
       "      <th>1557</th>\n",
       "      <th>label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>1923.000000</td>\n",
       "      <td>1926.000000</td>\n",
       "      <td>1917.000000</td>\n",
       "      <td>2658.000000</td>\n",
       "      <td>2670.000000</td>\n",
       "      <td>2670.000000</td>\n",
       "      <td>2670.000000</td>\n",
       "      <td>2670.000000</td>\n",
       "      <td>2670.000000</td>\n",
       "      <td>2670.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>2670.000000</td>\n",
       "      <td>2670.000000</td>\n",
       "      <td>2670.000000</td>\n",
       "      <td>2670.000000</td>\n",
       "      <td>2670.000000</td>\n",
       "      <td>2670.000000</td>\n",
       "      <td>2670.000000</td>\n",
       "      <td>2670.000000</td>\n",
       "      <td>2670.000000</td>\n",
       "      <td>2670.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>64.342694</td>\n",
       "      <td>154.372274</td>\n",
       "      <td>3.861894</td>\n",
       "      <td>0.761475</td>\n",
       "      <td>0.004869</td>\n",
       "      <td>0.011610</td>\n",
       "      <td>0.003745</td>\n",
       "      <td>0.003745</td>\n",
       "      <td>0.003745</td>\n",
       "      <td>0.011236</td>\n",
       "      <td>...</td>\n",
       "      <td>0.004120</td>\n",
       "      <td>0.003745</td>\n",
       "      <td>0.002622</td>\n",
       "      <td>0.003371</td>\n",
       "      <td>0.006742</td>\n",
       "      <td>0.013483</td>\n",
       "      <td>0.014232</td>\n",
       "      <td>0.010112</td>\n",
       "      <td>0.001498</td>\n",
       "      <td>0.137828</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>55.960951</td>\n",
       "      <td>129.406742</td>\n",
       "      <td>5.912808</td>\n",
       "      <td>0.426262</td>\n",
       "      <td>0.069621</td>\n",
       "      <td>0.107145</td>\n",
       "      <td>0.061096</td>\n",
       "      <td>0.061096</td>\n",
       "      <td>0.061096</td>\n",
       "      <td>0.105422</td>\n",
       "      <td>...</td>\n",
       "      <td>0.064066</td>\n",
       "      <td>0.061096</td>\n",
       "      <td>0.051145</td>\n",
       "      <td>0.057971</td>\n",
       "      <td>0.081845</td>\n",
       "      <td>0.115353</td>\n",
       "      <td>0.118469</td>\n",
       "      <td>0.100069</td>\n",
       "      <td>0.038684</td>\n",
       "      <td>0.344784</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.001500</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>25.000000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>1.035700</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>51.000000</td>\n",
       "      <td>109.500000</td>\n",
       "      <td>2.086900</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>86.000000</td>\n",
       "      <td>184.000000</td>\n",
       "      <td>5.098000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>640.000000</td>\n",
       "      <td>640.000000</td>\n",
       "      <td>60.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>8 rows × 1559 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            height        width  ratio(width/height)            3  \\\n",
       "count  1923.000000  1926.000000          1917.000000  2658.000000   \n",
       "mean     64.342694   154.372274             3.861894     0.761475   \n",
       "std      55.960951   129.406742             5.912808     0.426262   \n",
       "min       1.000000     1.000000             0.001500     0.000000   \n",
       "25%      25.000000    80.000000             1.035700     1.000000   \n",
       "50%      51.000000   109.500000             2.086900     1.000000   \n",
       "75%      86.000000   184.000000             5.098000     1.000000   \n",
       "max     640.000000   640.000000            60.000000     1.000000   \n",
       "\n",
       "                 4            5            6            7            8  \\\n",
       "count  2670.000000  2670.000000  2670.000000  2670.000000  2670.000000   \n",
       "mean      0.004869     0.011610     0.003745     0.003745     0.003745   \n",
       "std       0.069621     0.107145     0.061096     0.061096     0.061096   \n",
       "min       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "25%       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "50%       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "75%       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "max       1.000000     1.000000     1.000000     1.000000     1.000000   \n",
       "\n",
       "                 9  ...         1549         1550         1551         1552  \\\n",
       "count  2670.000000  ...  2670.000000  2670.000000  2670.000000  2670.000000   \n",
       "mean      0.011236  ...     0.004120     0.003745     0.002622     0.003371   \n",
       "std       0.105422  ...     0.064066     0.061096     0.051145     0.057971   \n",
       "min       0.000000  ...     0.000000     0.000000     0.000000     0.000000   \n",
       "25%       0.000000  ...     0.000000     0.000000     0.000000     0.000000   \n",
       "50%       0.000000  ...     0.000000     0.000000     0.000000     0.000000   \n",
       "75%       0.000000  ...     0.000000     0.000000     0.000000     0.000000   \n",
       "max       1.000000  ...     1.000000     1.000000     1.000000     1.000000   \n",
       "\n",
       "              1553         1554         1555         1556         1557  \\\n",
       "count  2670.000000  2670.000000  2670.000000  2670.000000  2670.000000   \n",
       "mean      0.006742     0.013483     0.014232     0.010112     0.001498   \n",
       "std       0.081845     0.115353     0.118469     0.100069     0.038684   \n",
       "min       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "25%       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "50%       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "75%       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "max       1.000000     1.000000     1.000000     1.000000     1.000000   \n",
       "\n",
       "             label  \n",
       "count  2670.000000  \n",
       "mean      0.137828  \n",
       "std       0.344784  \n",
       "min       0.000000  \n",
       "25%       0.000000  \n",
       "50%       0.000000  \n",
       "75%       0.000000  \n",
       "max       1.000000  \n",
       "\n",
       "[8 rows x 1559 columns]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# describe方法可计算数值特征的计数、平均值、标准差、最小值、最大值及25、50、75的百分位数。\n",
    "train.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "64d0e016",
   "metadata": {},
   "source": [
    "### 目标特征\n",
    "label特征的取值分布，因为该问题为二分类问题，因此label取值只有两种。通过plot绘制不同label样本数量柱状"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "dae1395f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x216 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "train['label'].hist(bins=5,figsize=(4,3))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c129f984",
   "metadata": {},
   "source": [
    "训练数据中的正样本与负样本的比例大概是1:7，正负样本并不均衡，后续处理应考虑平衡正负样本。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e04b9a6d",
   "metadata": {},
   "source": [
    "### 连续型特征"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "88f5f4ea",
   "metadata": {},
   "source": [
    "分析完目标特征后，对数据集的其他特征进行分析。  \n",
    "此数据集包含3个连续型特征：绘制数据分布直方图，方便直观地分析每个特征的分布情况。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "11b06be8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 648x360 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "cont_feas = ['height','width','ratio(width/height)']\n",
    "train[cont_feas].hist(bins = 100, figsize=(9,5))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b73354af",
   "metadata": {},
   "source": [
    "通过seaborn库中的violinplot绘制小提琴图来达到上述效果。  \n",
    "小提琴图可以可视化一个或者多个组的数字变量的分布，以width这个特征为例"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "45cf36d4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAEGCAYAAACZ0MnKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA/9klEQVR4nO3deXiU1fXA8e+ZmcxkD9kIgbAvsglBIiJUiyiIilBbtdZqce/Pte6Cta1dtGpbUavWqmhptaXWpaIIiCiLLGJAtrCGsAUihLBln+3+/phBUw0wkMy8k8z5PE+eeefOOzNHE+bMe5dzxRiDUkopFQqb1QEopZRqOTRpKKWUCpkmDaWUUiHTpKGUUipkmjSUUkqFzGF1AOGWlZVlunTpYnUYSinVoixfvnyfMSb7m+2tPml06dKFwsJCq8NQSqkWRUS2N9au3VNKKaVCpklDKaVUyDRpKKWUCpllSUNEThGRlQ1+DovInSKSISJzRGRz8Da9wXMmiUixiGwUkfOtil0ppWKVZUnDGLPRGJNvjMkHBgM1wDvARGCuMaYnMDd4HxHpC1wB9APGAM+LiN2K2JVSKlZFS/fUucAWY8x2YDwwNdg+Ffhe8Hg8MM0YU2+M2QoUA0MiHahSSsWyaEkaVwD/Ch7nGGPKAIK3bYPtHYCdDZ5TGmz7FhG5SUQKRaSwvLw8TCErpVTssTxpiIgTGAf853inNtLWaF13Y8yLxpgCY0xBdva31qYopVoh3eYhMixPGsAFwApjzJ7g/T0ikgsQvN0bbC8FOjZ4Xh6wO2JRKqWi1syZM7nkkkuor6+3OpRWLxqSxo/4umsKYDowIXg8AXi3QfsVIuISka5AT2BZxKJUSkWtKVOmcPDgQaqqqqwOpdWzNGmISCIwCni7QfNjwCgR2Rx87DEAY0wR8AawDpgF3GqM8UU24tj27LPP8v7771sdhlLf4vf7Ae2iigRLa08ZY2qAzG+0VRCYTdXY+Y8Aj0QgNNWIN998E4CxY8daHIlSjTuSPFT4REP3lFJKNQtNGuGnSUMp1eId6ZbS7qnw06ShlGo1vF6v1SG0epo0lFKths+nc2PCTZOGUqrV0CuN8NOkoUKifcWqJfB4PFaH0Opp0lAhqa2ttToEpY7L7XZbHUKrp0lDhURX2qqWQMuIhJ8mDRWSgwcPfnWsg40qWtXV1VkdQqunSUOFZN++fV8dHzhwwMJIlDq6mpoaq0No9TRpqJDs2rXrq+Pdu7W4sIouxgRWgms3avhp0lAh2b59+1fH27Ztsy4QpRrhC061PXTokMWRtH6aNFRINm7ciC81F3G42Lx5s9XhKPUVn89HVXWgW0q7TsPP0iq3qmVwu92UbN2KN6sPAOs3bLA4IqW+tm/fvq/WEen2zuGnVxrquIqLi/F5vfiTsvEmZVNSUqJTG1XU+PLLLwFw2gxlu3cd52zVVJo01HFt3LgRAF9SFv6kLPw+H1u2bLE4KqUCjoy3nZbtZtfu3boqPMys3rmvjYi8KSIbRGS9iJwpIhkiMkdENgdv0xucP0lEikVko4icb2XssaSkpASJc2GcSfgSMr5qUyoalJSUEO8QBma68fn87Ny50+qQWjWrrzSeBmYZY3oDA4H1wERgrjGmJzA3eB8R6QtcAfQDxgDPi4jdkqhjTFlZGT5nKohgXCkgNsrKyqwOSykA1q5ZTbcUN91TAzOo1q5da3FErZtlSUNEUoGzgSkAxhi3MeYgMB6YGjxtKvC94PF4YJoxpt4YsxUoBoZEMuZYVbF/P35HfOCOCOJM0FkqKipUVlZSUrKVXmkechL8tHHBypUrrQ6rVbPySqMbUA68KiJfiMjLIpIE5BhjygCCt22D53cAGl53lgbbvkVEbhKRQhEp1NkUTef3G4w0+FMR0aq3KiosWrQIvzEMzPIgAqdm1LF0yWItXBhGViYNB3Aa8BdjzCCgmmBX1FFII22NfnIZY140xhQYYwqys7ObHmmMS4iPR/wNBhd9Hlwul3UBKRX08cdzyUyAbimBrqkh2W5qauv47LPPLI6s9bIyaZQCpcaYI7/dNwkkkT0ikgsQvN3b4PyODZ6fB2g9iwho1y4Hh6c6cMdbj/HUk5OTY21QKubt3LmTZcs+56ycGl7fnMhrmxLpl+EhIx7eeedtq8NrtSxLGsaYL4GdInJKsOlcYB0wHZgQbJsAvBs8ng5cISIuEekK9ASWRTDkmNWpUyeoOww+L7bag1+3KWWhadOm4bDByA517KhysKPKgcMG53WoZsWKL9igi1DDwurZU7cDr4vIaiAfeBR4DBglIpuBUcH7GGOKgDcIJJZZwK3GGK3RHQG9e/cGY7DX7MNeHah2e8oppxznWUqFT3FxMTM/+ICR7Wtp4/rfXupzO9ST6oLnnv2zjr2FgaVlRIwxK4GCRh469yjnPwI8Es6Y1Lf16RMoH2KrKsdevY/MrGyysrIsjkrFKq/Xy1OTJ5MYZ/he12/vKJngMPygSxWvri1i1qxZXHDBBRZE2XpZfaWhWoD09HTatcvFXrUXZ005A07tb3VIKob94x//YG1REVf1qCQ5rvErie+2r6d3Gy9PPzVZF/s1M00aKiT9+/cj7tBOTH0Vffv2tTocFaMWL17M3/8+le+0q2NYu6NPq7UJ/F/fShzGzS9/8RCVlZURjLJ106ShQtKjRw8IbnTTo0cPi6NRsWjNmjU8/Ktf0SXFx096VR/3/Ix4P7f2PcSOHdv5+YOTtMhmM9GkoULScLaUzpxSkbZmzRomTXyADKebewYcIj7E0dh+GV5+2qeSNWvW8tBDP6e29ttjIOrEaNJQIWnXrt1XxxkZGRZGomLN4sWLuefuu0mmmvsHHCTVeWIzoobmuLmudxWFhYXcfdedurtfE2nSUCFpmChEGlucr1TzMsbwxhtv8NBDD9EhoY6HBh0gK8F/Uq/13fb13NH/MMWbNnLLzf+nVZqbQJOGCklycrLVIagYUlNTw8MPP8zzzz/PoMw6Juaf+BXGNw3O9vBA/iGqK8q4+eb/46OPPmqmaGOLJg0VEodDdwZWkbFu3TpuvOEGFiyYzw+7V3NH/0oSmunPr1cbL78p2E+XhBp+97vf8fjjj1NdffxBdfU1TRpKqajg8XiYMmUKt916K3UHdjMx/xAXda6juXtD27gMD+Qf4uLONcyaNZPrr7tWy6mfAP36qJSyXFFREX/6wx8o2baNs9rV8eNeNSQ6wlcCxGGDy7rXkp/l4a/rDXfddScXXzyOG2+8kZSUlLC9b2ugSUMpZZnKykpeeukl3ntvOukuuGvAYQZlRW6P755pXh45fT//2ZLIe+9N59OFC7j9jp8xYsQInfBxFJo0VEj8/pObtaJUY/x+P3PmzOGFvzzPwUOHGJ1Xy/e71jTb2MWJcNnhql41DG9Xz6ub/Pz6179mxoz3ueOOn+mapEZo0lAh0Z3QVHPZtGkTTz01mXXr1tMjzcedgyvpmmp9wequqT5+ddoB5u6K5+1Vy7nu2mu59LLL+MlPfkJiYqLV4UUNTRoqJLqSVjXVwYMHefnll5kx431SnHBjnyqGt6vHFkW9QHYbjO5Yx9Ccet7Yksi0adOYM3sWP735Fs477zxsNp07pElDhUSThjpZXq+Xd999l1dfmUJtTQ2j82q5pGttWAe6myrVabihTzXntK/nH5t9PProo/z3nbe542d3BvaXiWGWJg0R2QZUAj7Aa4wpEJEM4N9AF2AbcLkx5kDw/EnA9cHz7zDGzLYg7JjUcC67MUYHCVVIVq5cyVOTn2Tb9h30z/Dw4/7VdEiyvisqVN3TvPxy8EEWfenijZIN3Hzz/3HhhRdx44030qZNG6vDs0Q0XGmcY4zZ1+D+RGCuMeYxEZkYvP+AiPQFrgD6Ae2Bj0Skl+7eFxkNrzTcbjcul8vCaFS0q6io4Pnnn2fu3LlkJRh+dmolp2V5mn3NRSTYBM7Kracg281/tyYw84MZLJg/jxtv+ikXXXQRdrvd6hAjKho76MYDU4PHU4HvNWifZoypN8ZsBYqBIZEPLzbV1NQ0eqxUQ8YY3n//fa6+6irmfzKX8V1q+P2Q/QzObpkJo6EEh+FHPWv43ekH6eA4xJNPPsntt93K9u3brQ4toqxOGgb4UESWi8hNwbYcY0wZQPC2bbC9A9BwC67SYJuKgIZXGjq+oRpTVlbGPffczR//+Ec6x1fy6JAD/KBbLa5W9kU8L9nHpEGH+GmfSnZs2cAN11/H66+/jtfrtTq0iLC6e2q4MWa3iLQF5ojIhmOc29j3lEZH0oIJ6CbQvR+aS11d3VfHmjTUN33yySc88fhj4HVzzSlVjGgfXbOimpsIDM910z9zP3/fmMRLL73EokWf8vDDv6Zt27bHf4EWzNIrDWPM7uDtXuAdAt1Ne0QkFyB4uzd4einQscHT84DdR3ndF40xBcaYguzs7HCFH1MaJg3dAU0d4fF4eOaZZ/j1r39NB1cNj5y+n5EdWnfCaCjNabj91Cpu6VdJyaYN3HjD9RQWFlodVlhZljREJElEUo4cA6OBtcB0YELwtAnAu8Hj6cAVIuISka5AT2BZZKOOXQ0ThSYNBYG/g0kTH+Dtt9/m/I61PDjo4Envd9HSDc1x8/Dg/ST7D3Hfffcxa9Ysq0MKGyu7p3KAd4JTNx3AP40xs0Tkc+ANEbke2AFcBmCMKRKRN4B1gBe4VWdORU7DFeG6OlzV19fz4KRJrFixght6V3F2e/0i0T7Jz8ODD/DUmlQef/wxAMaMGWNxVM3PsqRhjCkBBjbSXgGce5TnPAI8EubQVCM8Hk+jxyo2PfHEE4GE0aeKs3I1YRzhssNdpx5mcjBx5OTkMGjQIKvDalZWz55SLUTDmSGxMktENW7JkiXMnTuX73Wt0YTRCKcd7jz1MNkJhj/+4YlW152rSUOFxOfzNXqsYs/zzz1Lh2Q/F3eOjll0r21KZHulne2Vdh5dkcprm6wvLuiyw3W9DrNrdxnTp0+3OpxmpUlDhaRhaXRNGrFr79697CzdxYjcWhxR8umxo8pBrc9Grc/GhoNx7KiyeiVBQN8ML+2TTKubTRUlv3YV7YyJ3uJyKnI2btwIQPfU6OmirPUK8fHxXHrppcTHx1PrjZ75vt1T6tm4fp3VYTSr6EjJKuo1TBqaQGLXkSJ9VZ7o+WCu8Qpjx47ltttuwxjDghlvWB3SVyo9NtIzMqwOo1lp0lBKhaxLly4ArD8YR34Et2U9lkRHoN6VMYYZM2aQEyUl190+KKlycnp+D6tDaVbaPaVC0vDqQrd+jV0pKSmMHDmSj3YlsK8uOj4+EhyGuro63nrrLerq6kiIkqQxc0cCh+th7NixVofSrKLjt66innZJqSN++tOfIrY4Xl6fgke/PzRqy2EH7+1I4qyzztJ1Gio2NVybobOnYltOTg733Hsv6w44eKEoBb9+n/gfu6rt/Gl1GpnZbbnzzjutDqfZadJQIfF4PGCPA7SMiILzzz+fW2+9lc/Lnfx5TQp10TOZylKbDzl4bGUbnElt+NOTk8nMzLQ6pGanSUOFpKamBpwJgJZGVwGXXXYZt99+O19UuPjtF+mU18b2x8nCMhe//yKNpIx2TH7qadq3b291SGER279lFbLKykp89gTE5uDw4cNWh6OixA9+8AMef+IJDviT+WVhOsv2Oq0OKeJqvfDy+iReWp/MgPxBvPDXF+ncubPVYYWNJg0VkvJ9FfjjEsCZwP79+60OR0WR008/nRf++iJ53Xrx7NoU/roumZooWmAXTpsOOnioMINPv0zgqquu4okn/kBqaqrVYYWVJg11XMYY9u0rxzgT8ToS2bu33OqQVJTJy8vjueeeZ8KECSzZm8CDyzL4Yl+c1WGFTZ0XXt+cyCNfpOFIyeHpZ57hhhtuwOFo/UvfNGmo4zp06BD1dXX4nSn4Xcns2r3L6pBUFHI4HFx77bU899xzpLXrzOTVqTy7NpmD9a3rqmNVRRwPfp7J7J0JXHzxOF5+5VVOPfVUq8OKmNafFlWT7d4d2FXX70pBfPVUlJXg8XiIi2u93yTVyevTpw8vvvQy06ZN4+9/n8raZS4u79by9w0/WC+8vjmJz/a66Nwxj1/d/0BMJYsjLL/SEBG7iHwhIu8H72eIyBwR2Ry8TW9w7iQRKRaRjSJyvnVRx5aysjIATHwKflcKxhj27NljcVQqmsXFxXH11VczZcornNI/n79tTOa3K9qwo9JudWgnzG/go1IXDyzLYMWBJK699lpemvJKTCYMiIKkAfwMWN/g/kRgrjGmJzA3eB8R6QtcAfQDxgDPi0jL+wtsgcrLA2MYfmcyxpkMBEpkK3U8nTp14sknJ/Pggw9SYdrwy8I2/GtzIvUtZH3o9ko7v1nehr9vSqbfgNN49dW/MWHCBJzO2JsldoSlSUNE8oCLgJcbNI8HpgaPpwLfa9A+zRhTb4zZChQDQyIUakzbv38/YneAPQ4TF1irceDAAYujUi2FiDB69Gj+/trrXHDhRczcmcDEZZlRPVBe54V/bU7kV4Vt2C/pPPTQQ/zhj38iLy/P6tAsZ/WVxlPA/UDDCjY5xpgygOBt22B7B2Bng/NKg20qzKqqqsDhAsDYA9+wqqurrQxJtUCpqancd999PPPMMyRnd2Ty6lSeX5tMpTu6BjqK9jv4+ecZzNyZwIUXjeUfr73Oeeedh0h0xWkVy5KGiIwF9hpjlof6lEbaGq16IyI3iUihiBQe6VpRJ8/r9YIE/lSMLXCrpUTUyRowYAAvT3mF6667jsKKRCZ9nhEViwJrvcKrG5J4fGUazvT2PPPMM9x7772kpKRYHVpUsfJKYzgwTkS2AdOAkSLyGrBHRHIBgrdHOs9LgY4Nnp8H7G7shY0xLxpjCowxBdnZ2eGKP2Y4HA4wgYtBCZZF15lTqini4uL4yU9+wosvvUS7Tj14dm0KLxQlW7brXvEhBw99ns78sgR++MMf8sqrf2PAgAGWxBLtLEsaxphJxpg8Y0wXAgPcHxtjrgKmAxOCp00A3g0eTweuEBGXiHQFegLLIhx2TEpISABfcMMdv+frNqWaqFu3bjz/lxe45pprWLo3nl8UprPlcORWAvgNTN+WwO9WpGFPzeGZP/+Zm2++GZfLFbEYWhqrxzQa8xgwSkQ2A6OC9zHGFAFvAOuAWcCtxpgWMgejZUtLS8N43eD3YfPUAV9v+6lUUzkcDq655hqeevppSMrmd8vT+GRX+D+0qz3Ck6tTebMkkRHnjOTlKa/Qv3//sL9vSxcVi/uMMfOAecHjCuDco5z3CPBIxAJTAGQE9zgWTw3iqfmfNqWay4ABA5jyyqv89je/4dXPP2dntZ0re9TgCMNX27JqG5PXtmFfnYN77rmTsWPH6kB3iKLxSkNFmSPjQjZ3DeKu+Z82pZpTSkoKv3/sMX74wx/yUWkCT69Jwd3M/QlbDjv4zYp06uypPDl5MhdffLEmjBOgSUMd15EEIe5qbJ5qHHFxrb6Sp7KO3W7n5ptv5u6772b1fidPrklrtsWAGw86eGJlGqkZbfnLX1/Uwe6ToElDHVdWVhYQ7J5y15KRkaHfzFTYjRs3jkmTHmTDgTieXpOKt4n7kW+rtPPH1WlktevAM88+R25ubvMEGmM0aajjSklJwWa3I946xFtLenr68Z+kVDMYPXo0991/P2v3x/GPTUmYk9yPfH+djclr2pDaJpOnnn5Gu1ebQJOGOi4RITExCfG6sfk8pOpiJxVBF1xwAT/+8Y/5ZHc8C8pOfFaVzw/PFqVSL/E8/sQfWuW+3ZGkSUOFxOVyIcaHzXh1jYaKuOuvv55B+QP5Z3Ey++pO7GNr5s54ig/Zuefe++jWrVuYIowdmjRUSOLi4sDvA2Ow27W4sIosm83G/Q9MBIeL1zclhfy8fXU23t6axNlnn8XIkSPDGGHs0KShQmJOtjNZqWaSm5vLj678Mcv3OdkW4r4c729PALFz22236+SNZqJJQ4XE5/OBCIgEjpWywPe//32SkxKZsf34XaSH3cL8snguvOgi2rZte9zzVWg0aaiQuN31GJsDv9i1wq2yTHJyMueNGs0XFS7qvMc+t7Dcic8P48ePj0xwMUKThgpJfV09BJNGXV2d1eGoGHbOOefg9sGa/ccup15Y7qJjXgcd/G5mIdWeEpFewH1A54bPMcboyFIM8Pv91NfXYexxYI+jSjdgUhbq06cPDrudksMOTm/b+FWvMbC10snI4afpWEYzC7Vg4X+AF4CXAO3QjjG1tbUAGFscxh6nu/YpSzmdTrp07cKO/euPek5FnY1qj6Fnz54RjCw2hJo0vMaYv4Q1EhW1vkoSDifG7qS6er+1AamYl5WVTdnezUd9/JDHFjwvK1IhxYxjjmmISIaIZADvicgtIpJ7pC3YrmLAkaQR6J5yUltTa3FEKtalpKRQ4z36x1eNJ9AllZycHKmQYsbxrjSWE9iH+0in4H0NHjOAjjDFgK+TRuBKw+Nx43a7cTqt39dZxSafz4f9GEMVDpv56jzVvI55pWGM6WqM6Qb0CR5/9QP0bcobi0i8iCwTkVUiUiQivw62Z4jIHBHZHLxNb/CcSSJSLCIbReT8pry/Ct3hw4cBMHYXxhFIFJWVlVaGpGJcTU0NLtvRy9667IGkcWQ8TjWfUKfcLg6x7UTUAyONMQOBfGCMiAwFJgJzjTE9gbnB+4hIXwJ7ifcDxgDPi4jWs4iAQ4cOAWAcLozD9T9tSllh75dlZLiOvlAjwxVIKHv27IlUSDHjeGMa7URkMJAgIoNE5LTgzwggsSlvbAKqgnfjgj8GGA9MDbZPBb4XPB4PTDPG1BtjtgLFwJCmxKBCs39/YODbxCVi4hL/p02pSPP5fOwqK6NtwtG7ntKcBpcdSktLIxhZbDjemMb5wDVAHvBkg/ZK4MGmvnnwSmE50AN4zhjzmYjkGGPKAIwxZSJyZP1/B2Bpg6eXBtsae92bgJsAOnXq1NQwY155eTnicIHdgT+YNMrLyy2OSsWqHTt2UF/vpnPy0a80RKBTspdNGzdGMLLYcMykYYyZCkwVkR8YY95q7jc3xviAfBFpA7wjIv2PcXpjw16NVtEzxrwIvAhQUFCglfaaqLS0FJ8rsIeGcSaDCLt27bI4KhWrioqKAOiaeuxB7m6pHuZt2qiTNprZMZOGiNzd2PERxpgnv9l2MowxB0VkHoGxij0ikhu8ysgF9gZPKwU6NnhaHrC7Od5fHduWkhJ88cH5CDYbJKRRUlJibVAqZi1fvpw2LmifeOyk0aeNh9k7PRQVFTFo0KAIRdf6HW8gPCX4UwDcTKA7qAPwfzR99lR28AoDEUkAzgM2ANOBCcHTJgDvBo+nA1eIiEtEugI9gWVNiUEd3969ezmwfz++pK+3x/QkZLK2qEjLpauI83q9FH6+jH7p9RyvOkifdC92gWXL9GOiOR1vyu2vjTG/BrKA04wx9xhj7gEGE/im3xS5wCcishr4HJhjjHkfeAwYJSKbgVHB+xhjioA3gHXALODWYPeWCqMj/+B8KTlftXlTcjl86BDFxcVWhaVi1Jo1a6isqua0rONXWk5wGPqke1gwf55+wWlGoZYR6QQ0/C25gS5NeWNjzGrgW9eMxpgK4NyjPOcR4JGmvK86MfPmzYP4VPwJXxcA8LXpCCLMmzdPa/uoiJo/fz5xdhiQGVp5/oLsev62sYytW7dqtdtmEuo6jX8Ay0TkYRH5FfAZ8PfwhaWiwfbt2yksLKQ+ozsN+wJMXALetDymv/ce9fX1FkaoYonX62Xex3MZlFmPK8QVWgXZbmwCc+fODW9wMSSkpBH8hn8tcAA4CFxrjHk0jHGpKPDaa68hNgeetr2/9Zg7pz+Vhw/z3nvvWRCZikXLly/n4OFKhuaEvglYqtPQL93DR3M+xO8/+gpyFbrjLe5LDd5mANsIXHH8A9iuBQtbtzVr1jBnzhzq2vbFxCXg2rEU146vl8n4UtrhS23PK6++yoEDByyMVMWKDz/8kKQ4GBhi19QRw9rVsWdvOWvWrAlTZLHleFca/wzeLgcKgz/LG9xXrVBtbS1PPPEHcCXjbj8QAFvNfmw1DVaBi1DXaSg1tbU8OXmyDjSqsKqpqeHThQsYkl1H3AnuN1qQ7SbeIcyePTs8wcWY482eGhs8/BT4PXBhg6KFOqrUSj377LPs3LmDmi7fAXvcUc/zJ7Shrv1gFi5YoN1UKqzmz59PvdvDd3JPfAzNZYeCrFrmffKxjsE1g1Bz9qsEpsj+WUS2iMibIvKzMMalLPLee+8xY8YM6tsNwJfa/rjne9r1x5fWgaefeYa1a9dGIEIViz78cDZtEw09Uo9eOuRYhrerp6a2jkWLFjVzZLEn1IHwjwlMdf0F8DJwOoHFfqoVWbFiBZMnP4UvLQ933mmhPUmEmm7fxedI5MGfP0RZWVl4g1QxZ+/evaxcuZLhObXHXdB3NH3SvaTHw0dz5jRvcDEopKQhInOBRcAPgY3A6caYb0+pUS3W5s2befDnP8cXn0pNtxEgJ9Bx7Iinusd5VFbXcs+993Lw4MFwhali0Mcff4wxMCzn5LuWbAJD29by2bLPtKx/E4X6ybCawIK+/sAAoH+w9IdqBXbu3Mm9991Hnd9Odc/R4Djx4m7+hDZU9ziXsrI93Hf//VRVVR3/SUqF4OO5H9Et1UdOYtOmzJ6ZU4/P52fhwoXNFFlsCrV76i5jzNnAJUAFgTGOg2GMS0XIrl27+Nmdd3K4pp7qnqMxzqSTfi1fSjuqu49g8+Zi7rv/fmpqapoxUhWLdu3axabNxZzRtq7Jr9U52Ue7JMPHH+tCv6YItXvqNhH5N7CSwKZIrwAXhC8sFQmlpaXc8bM7OXC4mqqe5+NPaNPk1/S16URttxGsX7+ee++9T684VJMsWLAAgNOzT2xtRmNE4PSsWlauXKVdVE0QavdUAoFNmHobY84NFjL8OIxxqTArKSnh1ttuY//hKqp6nY8/sfnWanozulDbbQTrNqznzjvv0jEOddIWzJ9H11QfWQnNs5q7INuN3+9n8eKm7lYdu0LtnvqDMeYzY8zJzXdTUWX16tXcdvvtHKr1UNXrAvyJmc3+Ht6MrtR0P5ctJVu59bbbdFaVOmEVFRWs37CRwVnNt7aiS4qPzAT49NNPm+01Y80Jrq1ULd38+fO5++57qPHHUXXKhc3SJXU0vjYdqe41mt1flnPzzbewefPmsL2Xan2OXA0MCqEMeqhEYFBmLYWfL6OurunjJLFIk0YM+c9//sOvHn4Yd0I6lb0vxAS3cA0nX0o7qnpfyMFaD7fdfrtuiKNCtnjxIrITDHlJzbttzqBMD/VuDytWrGjW140VmjRigN/v5/nnn+e5557D26YT1b3GgCM+cu+fkE5V77HU2ZOYOHEiM2fOjNh7q5aprq6OFcuXk59Zd9IL+o6md7qHeIewZMmS5n3hGGFZ0hCRjiLyiYisF5GiI2VJRCRDROaIyObgbXqD50wSkWIR2Sgi51sVe0vi8/l44okneOONN3C37Utt93PAFureW83HOBOpOuUCPMntePzxx3nrrbciHoNqOVasWEG928OgLE+zv3acDfqn17F40adaaPMkWHml4QXuMcb0AYYCt4pIX2AiMNcY0xOYG7xP8LErgH7AGOB5EQlxK5bY5Pf7efTRR5k1axb17QdR3+mME1vp3dzsTmp6jsKb3pk///nPTJs2zbpYVFRbvHgx8Q7o3ab5kwbAoCwPFfsPsGnTprC8fmtm2SeIMabMGLMieFwJrAc6AOOBqcHTphJYF0KwfZoxpt4YsxUoBoZENOgW5qWXXmLu3LnU5w3G3WEQzX6dfzJsdmq7n4MnoysvvPACH3+sM7fV//L7/Sz6dCEDMupxhOkTamCmGxG0gOFJiIoxDRHpQmC/8M+AHGNMGQQSC9A2eFoHYGeDp5UG2xp7vZtEpFBECsvLy8MWdzSbO3cu//rXv3C37Y273QCrw/lfYqOu69n4U3J49NHfs2XLFqsjUlFk3bp1HDh4iNOacdbUN6U6Db3SvCyYPy9s79FaWZ40RCQZeAu40xhz+FinNtLWaIekMeZFY0yBMaYgOzu7OcJsUSorK3n6mT/jT25Lfaeh0XGF8U02OzXdR+ITB08+OVm34lRfmTdvHg4b5IdhPKOh07Pr2bZ9B9u3bw/r+7Q2liYNEYkjkDBeN8a8HWzeIyK5wcdzgb3B9lKgY4On5wG7IxVrS/LPf/6Tw4cPUdvpTGvHMI7DxCVQ02EwRUVrvyoXoWKb3+9n/rxPODXDTaIjvIPUBW3dCIEkpUJn5ewpAaYA640xTzZ4aDowIXg8AXi3QfsVIuISka5AT0An/X9DfX090997H0+bzviTmn+ld3PzZvWE+BTeevvt45+sWr1Vq1ZRvq+CM5tQBj1UGS4/p7TxMufD2TqL6gRY+TV0OHA1MFJEVgZ/LgQeA0aJyGZgVPA+xpgi4A1gHTALuNUY07yrflqB+fPnU11ViadtC9nuRIS6rN6sWb2abdu2WR2Nstjs2bOJd0izrgI/lmHt6ijdtZv169dH5P1aAytnT31qjBFjzABjTH7w5wNjTEWwKGLP4O3+Bs95xBjT3RhzijFGV4g1Yvp770FCGr6UXKtDCZk3qwfYbMyYMcPqUJSFampqmPfJx5yRXYsrQpPpz2jrxmVHF5yegOjt8FYnrLCwkLVr1lCX1Ss6B7+PwsQl4GnThenT32Pv3r3Hf4JqlebOnUtdvZvvtg9/19QRCQ7D6dl1zP1oju7/EiJNGq1ETU0Nk596CuJT8bTtY3U4J6w+bzBuj5enn35GZ1LFIGMM7/73HTqm+OmeGtli2ud0qKemto6PPvooou/bUmnSaAVqamq47/772bVrFzWdzrSkTEhTGVcKte0HsWjRp/zpT3/SxBFj1q1bR/GWEs5tXxPxi+QeqV46p/j57ztv64B4CDRptHClpaXcdffdFBUVUdttBL60Rtc7tgiedv2pzx3IjBkz+O1vf0tlZaXVIakIefvtt0mIg2ERmDX1TSJwbocaSrZuY/Xq1RF//5ZGk0YL5ff7efvtt7nuuuvZVLyV2u7n4M3oanVYTSOCu8Np1HcYzCfz5vGTCdewdOlSq6NSYVZRUcH8efM4K6eWeIsuks/MqScpDt5+WwtpHk/L68eIccYYli1bxstTprB50yZ8aXnUdhmOcSaF7T1dO5Zir6kAIGHDB/gTMwIrzcNBBHf7gXjTOmC2LWTixIkMGz6ca6+5hp49e4bnPZWlZsyYgdfn49w86zZFctnh7Ha1zF74KeXl5cRiJYlQadJoIYwxFBYWMuWVV9iwfj3Ep1Db9Sy8mT3CPlPKVrMf8QVKOjgqvyQSw5T+pCyq+ozD+eUalnxWyOJFizj77LOZMGEC3bt3j0AEKhK8Xi/T3/0v/TM85CZaO441skMds3YmMGPGDK655hpLY4lmmjSiXE1NDXPmzOGtt99mx/bt4EqmrvMwPFk9wdbKK8Pb7Ljb5+Nu2wfnniIWLl7KggULyM/P55JLLmH48OE4HPon3JJ9/vnn7KvYz4/6W7/1ak6in34ZHj6Y8T5XX301dnsr//d1kvRfXJQqKSlhxowZfPDBTGprazBJmdR3+Q6ezO6tP1l8k8OFu8NpuHP64SzfwMr1G1m58ldkZmYxfvw4xowZQ9u2bY//OirqzJw5k1RX8+4D3hQj2tfx7Np9fPHFFxQUFFgdTlTSpBFFysvLmTt3LrNmf8i2rSVgs+Fp0xV3lz74k7Jb1IK9sHC4cOcOxN3uVBwHd7J373peeeUVXn31VQYOHMjo0aM5++yzSU5OtjpSFYKamhqWLlnC2Tm1Yds340TlZ7pJcAgff/yxJo2j0KRhsf3797N48WLmfvwxK7/4AmMM/uS2uDsNxZvRFROXYHWI0UdseNM7403vjNQdJq5iCys3bmHlyid48snJDB8+jHPOOYchQ4aQmJhodbTqKJYtW4bb4+GMttFxlQHgtMOgzDoWLpjPvffei80WJdksimjSsEBZWRkLFy5kwYIFFBUVBRYUxadSnzsQT2Z3THya1SG2GCY+FXeHQbjb52OrLieuYgsLlixj/vz5OBxxFBQUcPbZZzFs2DDatGljdbiqgeXLl5MQF1hcF01OzXSzeE81xcXF9OrVy+pwoo4mjQjw+Xxs2LCBpUuX8umiRWwtKQHAJGbgzh2IN70z/oQM7X5qCpHAplPJbanvdAb2yj04Dm5n6RdrWLp0CSLCqacOYNiwMxk6dCidO3dG9P+3pVatXMEpqW7sUfZlvm96YKbgqlWrNGk0QpNGmFRWVrJs2TKWLl3K0qWfUVl5GETwJbfF0/F0vG06Y+JTrQ6zdRIbvtRcfKm51Hc8A1tNBY4D21lVvJPVq1fxwgsv0LZtDsOGncmZZ55Jfn4+LpfL6qhjisfjoXRXGfkdo+sqAyDdZUh2iu7odxSaNJqJMYYdO3awZMkSFi1eTNHatfj9fiQuHndqB7zdTsOb1gEc+uEUUSL4k7JwJ2XhzhuM1FfhOFTK7kM7efe9Gfz3v/8lzumkYHDBV0kkKyvL6qhbvT179uD3+2mXGJ1b4rRL8LBrV6nVYUQlTRpN4PV6WbVqFUuWLOHTRYv4sqwMAJOUiTvnVLxtOuJPyorqLVdjjXEl42nbG0/b3tT6vdgrv8RxcCdLvljDkiWLAejRsyfDhw1j2LBh9OrVS7uxwuBIGfLm2NK1U7KX7ZWBaeidU3x0Sm761Uuiw6+l0o/C0qQhIq8AY4G9xpj+wbYM4N9AF2AbcLkx5kDwsUnA9YAPuMMYM9uCsCkpKWHmzJnMnv0hhw8fApsdb0ou3s5n4k3riHHplM8WwebAl5aHLy2PemOw1R7EcWgHm77cSfHUqUydOpXc9h246MILGD16tK4FaUYeT2DcwN4M+fiqXjXsqAp8lD142uGmvyCBuDzu6JnVFU2svtL4G/As8PcGbROBucaYx0RkYvD+AyLSF7gC6Ae0Bz4SkV6R2vK1traWmTNn8sEHMyku3hxYQ5HWEW+PwXhTO4A9LhJhqHARwZ+YjjsxHXfuQMRTi/3gTkorinn55ZeZMmUKpw0ezEUXXsiIESN0KmYTpaUFZghWeaLzKq7KYyOtTbrVYUQlS5OGMWaBiHT5RvN4YETweCowD3gg2D7NGFMPbBWRYmAIsCTccW7fvp2HfvFLdu7YHliZ3Wko3oxumLj4cL91dPC5iY+PZ+zYsbz//vtU+Vr/NzATl4A3uxfe7F7BtSDFLF+7keWFhcyaNYuf//znX33wqROXmZkJQHlddFY32FfvoIuObTUqGr8u5RhjygCCt0f6BDoAOxucVxps+xYRuUlECkWksLy8vEnBfPrpp9x0008p/XIvNb3Op6rveDw5fWMnYQDidTN27Fhuu+02LrroIsTb+pNGQ4G1IKdR2f9S6jqfybLC5Vx/ww1s2bLF6tBarISEBDp36siWw1Z3dnxbRZ2NA3XQu3dvq0OJStH3Gzu6xq5jGx1FM8a8CLwIUFBQ0KSRtnfffZd6t5uqUy+N2bEK43Dy/vvvY4xhxowZGEeMrrIWwdO2D35nMvs2z+GTTz7RirtNMGBgPh/NLMXtq8QZRRcc6w4EuppPPfVUiyOJTtF4pbFHRHIBgrd7g+2lQMcG5+UBu8MdzIUXXgjGT1zFFvBH5/TAsLM7qaur46233qKurg7sTqsjso63nrj9JSDCmDFjrI6mRfvud79LrdewsiK6/p4WfemifW473b/lKKIxaUwHJgSPJwDvNmi/QkRcItIV6AksC3cwZ511FgMGDsS1azkpa98k7ssiCO4toWKHeGpx7vyc1DX/Ia5iC9+/5Pvk5eVZHVaLNmjQILIyM/h4V/TUVyursbH+QByjzx+jU62Pwuopt/8iMOidJSKlwK+Ax4A3ROR6YAdwGYAxpkhE3gDWAV7g1kjMnHI4HDz91FMUFhby2muvsWrVZyR8uYr6NoGCeb6U3NgrVR4rfG4cB0txHNyO8+BOMD7OOeccrrzySnr06GF1dC2e3W7n0ssu54UXXmDzIQc906xfHf7+tgSczjjGjx9vdShRy+rZUz86ykPnHuX8R4BHwhdR40SE008/ndNPP521a9fy5ptvsmTJUurLNyIOJ+7UvEDV1bQ8nXrbwomnFseB7TgO7sBRWQZ+H6lpbTjn4ou47LLL9OqimY0bN45//fN13izxMjH/kKXl10qr7CzaE8/3fzCe9HSdbns0LWkgPCr079+f/v37U19fz/Lly/n0009ZuPBTKreUgM2OLzknsH6jTZ5Wq20JjAnUpjq4k7jDpdiqArPtctq147vn/4DvfOc79OvXT3dxC5PExESuu/4GJk+ezOflToZYVCbdGHhtczJJSUlcddVVlsTQUmjSOEkul4thwVITd999N0VFRSxatIjFS5ZSuvMz2PkZJKQF6k6ldcSX0k67saKFz43j0C4ch0pxHt6FcdcgIpzSuzfDzryY4cOH061bN+3TjpCxY8fy3vR3eb24hH7p+0mKa3ppkRO1eI+TdQcc/OxnN2gJ/ePQpNEMHA4HAwcOZODAgdxyyy3s3r2bzz77jKVLl7JixQo8e9YhDhfutI54MrrgS+2gCSTSvPU4Du7EcWBbIFH4fSQlJXPGd4YydOhQhgwZoh8WFrHb7dx3/wPcfPPN/HNzIjf2rY7o+x+sF17bnEK/vn0ZN25cRN+7JdKkEQbt27fnkksu4ZJLLvmqG2vBggUsWLiQms3FwXGQjngyu+FLy4v6fTT8iRmYmgoAfImZ+BMzLI4oRH4vjv1bidu/FUflbvD7yczKZuQPvs9ZZ51F3759cTj0n0A0OOWUU7jyyit57bXXGJTtoSA7Mt1UfgMvb0jBQxwPTJyo3ZAh0H8xYdawG+uee+5hxYoVzJ8/n/kLFlK9eQvEp1KX3QdPds+oXf9Q32kotpr9ANT2vtDiaI5P3NXE7V1P/L5NGE8d2W3bcs75lzJixAh69+6tdaOi1IQJE/h82We8snEz3VIOkBHvD/t7frgzntUVcdx112106tQp7O/XGmjSiKC4uDjOOOMMzjjjDO6++24WLFjAf958k/XrPiOh7AvqM3tS3z5f99w4SVJ3GNeuFcQd2IZgGDZsGJdeein5+fk6PtECxMXF8Ytf/oobb7ie59elMCn/UFh39Ss5bOffJUkMHz5Mu6VOgCYNizgcDkaOHMnIkSPZsGEDb775Jh9//DGu/VuoyTsdb2aPqO+2ihp+L86y1cR/uSYwx/6yS7nkkkvIzc21OjJ1gvLy8rj7nnt55JFHeHtrApd1rw3L+1R7hOfWpZGZmcUDD0zULxUnQJNGFOjduzcPPfQQP/zhD3ly8mTWr1uIf99marqeHbP1rkJlq9pL0tYFUHeYc0aO5JZbbtGd91q4UaNGsXLlSt6bMYNebbwMzGzeCgzGwMsbktlfb+eZP/ya1FTddvlEaOduFOnZsyfPPfss9913Hwmeg6Ssn4790C6rw4pOxhC3dz1JGz8gOzWeP/3pT/zyl7/UhNFK3HHHHXTr0oW/rk9lf13zfkzNKY1nebmTm276Kf369WvW144FmjSijM1m46KLLuKlF1+kY/scEjfNxrlrBZjwDwq2GD438SXzid++hCGnn86Ul19m8ODBVkelmpHL5eLh3/wGn83FX9al4GumP/+th+38a0sSw848k8svv7x5XjTGaNKIUp06deKvL7zAqFGjcO1eSeKm2Yhb9yy2VVeQsv49nAe2cv311/PY73+v3QutVKdOnbjr7nvYeNDB9O1NL2pY64Xn16WRkZHBxEmTdBzjJGnSiGIJCQk8+OCDPPDAAyTU7Sel6B3i9hSBPwavOrxuXDs+I2n9e2QkOnjqqae4+uqrdfpsKzd69GhGjRrFf7clsvlQ04ZgX9+cRHmtjYd+8Sv9otEE+i8uyokIF1xwAS+99CKDBvYnfsdnJK9/F/uh0sCIXmvn9xNXvonUordw7l3HhReM4ZUpUxg4cKDVkakIufPOO8lp25a/rk+l7iQL4S4vj2NBWTxX/vjH+rfTRJo0WojOnTvzpz/+kd/97ne0S3WRuOlDktdPx7Fvc+vcHMpbT1zZGlLWvkn8tk/p06Mbf33hBe6//34t9xFjkpKSmPTgzymvFf5TcuK7RlZ7hL9tSqVH925MmDDh+E9Qx6RTblsQEeE73/kOQ4YM4aOPPmLav//Njq0LkV3LqcvujSerJ8aZZHWYTWKr2U9c+SZcFZsxPg/5gwbxw8svZ+jQodoHHcMGDhzI9753Cf995x3OzHHT4wT23phWnEilx8YfJ04iLk63LmgqTRotkNPp5MILL+SCCy6gsLCQaf/+N8sLC3HtWoEvtT3urJ5423QGe8v49YqnFkdFCa79xUh1BXa7nZEjR3L55ZfrlpvqKzfccAMLF8xn6iY/vy44gC2E7xDFhxzML4vniiv0b6m5tIxPlQZEZAzwNGAHXjbGPGZxSJZpuDnUrl27+PDDD/lg5kzKS+YjDmdgd8HM7oGy7BJlPZF+b6DqbMUW4g6VgvHTvUdPLrzgSs4991ztglLfkpSUxM233Mpvf/tbFpa5+G77+mOe7w/ukZGZns5PfvKTCEXZ+rWopCEiduA5YBRQCnwuItONMeusjcx6HTp04Nprr2XChAmsWrWKWbNmMW/+fOr3bUacidSnd8WT0Q1/UpZ15UmMH/vh3cRVlOA8tAPjddMmPZ3Rl13KmDFj6NatmzVxqRZj5MiRvPXWm7xVsp4zc+pxHqMobWG5k5LDdiZO/CmJiSc+FqIa16KSBjAEKDbGlACIyDRgPIF9wxWBxYGDBg1i0KBB3HXXXSxdupQ5cz5i6WdLce4pgoQ06jO648nsEbESJbaaCuL2FeM6UIJx15KQmMg5o8/j3HPPJT8/X8tRq5CJCDfeeBN33XUXn+yO5/yOdY2e5zfwzrYkOnfMY9SoURGOsnVraUmjA7Czwf1S4IxvniQiNwE3ATFd7jg+Pp4RI0YwYsQIKisrWbhwIbNnz2bVqhVfj39k9sCb3uW44x8nuofGt8YpHA6GDxvGqFGjOOOMM3A6o7MMvIp+gwYNIn/gQD7YuIpzO9ThsEGn5P8dGP9iXxy7qmz84q5r9UtJMxPTgub6i8hlwPnGmBuC968Ghhhjbj/acwoKCkxhYWGkQmwRysrKAuMfH8xkz54vEYeLuqxeeHL6YZxNu4y31RzA+eUa4g6UgN9Pr1NO4YIxYxg5ciRpabpnumoeS5YsYdKkSdzSr5KhOd/esOnRFWnsj2vHP/81TTfaOkkistwYU/DN9pb2f7MU6Njgfh6w26JYWqzc3FwmTJjA1VdfzerVq3nnnXdYsGABrr1FeDK6427XH39C+gm9pv1wGa4v12A/VIrT6eKi8eMZN24cXbt2DdN/hYplZ5xxBh3a5zJ3l/dbSWNXtZ0NBx389Kc/0IQRBi3t/+jnQE8R6QrsAq4ArrQ2pJbLZrORn59Pfn4+u3fv5s033+T992cQV1GMu21f6jucBvZjz2sXdzXxO5biOLCdtDZtuOyGGxg3bpyWaVBhZbPZGHPBhUyZMoXyWhvZCV+X1ln8pRObCKNHj7YwwtYryuZhHpsxxgvcBswG1gNvGGOKrI2qdWjfvj133HEH//nPG4y7+GKce4pIKXonUK6kMcYQt2cdKUXvkFBdxo033sgb//43V111lSYMFRFHBriX7vl6fMwYWFqewOCCwWRmZloVWqvWopIGgDHmA2NML2NMd2PMI1bH09qkpaVx99138+yzz9I5N4vEzXNw7Cv+35OMwbXzc+J3LGXwoIFM/dvf+PGPf4zLpdvUqshp164dPXv0YGXF1393u6rtlNcIZ5/9XQsja91aXNJQkdG/f39e+MtfyM/PJ2HrAhwVW756zLXzc5x71nLJJZfwhyeeoH379hZGqmLZsOHDKT7koNoTWHu0qiLQnTp06FArw2rVNGmoo0pISOCx3/+eU089lcQdSxBPLfbKL3HuWcu4ceO44447tB6UstSgQYMwwKZg2fQNB+PomNeB7OxsawNrxTRpqGOKj4/nvvvuQ/w+nLu+IL70czIzs7j55ps1YSjL9enTB4fdzuZDcRgDxZVOBgzMtzqsVk2ThjquTp06MWrUeTjLN2CrKufKK39EQkLTd1JTqqlcLhddunZhW6WDfXU2qt1wyimnWB1Wq6ZJQ4XkzDPPbPRYKav16nUKO6qd7KgKrPzu0aOHxRG1bi1tnYayyLBhw7juuutIS0vTgW8VVTp16sThesOWw4FB8M6dO1scUeumSUOFxOl0anlpFZXy8vKAwMypNmmpJCW17I3Iop12TymlWrScnBwAdlY5aJeba3E0rZ8mDaVUi9a2bdsGxzkWRhIbNGkopVq0lJQU7PbAR1lGxomV8FcnTpOGUqpFs9lspATHMbT8fvhp0lBKtXgS3GhJi2WGnyYNpVQrEKhOkJwcmS2MY5kmDaVUq5GY2LSdJ9XxadJQSrUaWt4m/DRpKKVaDafTefyTVJNYkjRE5DIRKRIRv4gUfOOxSSJSLCIbReT8Bu2DRWRN8LFnREusKqWCjnwcaNIIP6uuNNYC3wcWNGwUkb4E9v3uB4wBnhcRe/DhvwA3AT2DP2MiFq1SKqoZYwBNGpFgSdIwxqw3xmxs5KHxwDRjTL0xZitQDAwRkVwg1RizxAT+Ov4OfC9yESulWgKHQ8vphVu0jWl0AHY2uF8abOsQPP5me6NE5CYRKRSRwvLy8rAEqpSKPpo0wi9sSUNEPhKRtY38jD/W0xppM8dob5Qx5kVjTIExpkC3fVSq9RszJtBbres0wi9sadkYc95JPK0U6Njgfh6wO9ie10i7Ukpx4403cvnll+uK8AiItu6p6cAVIuISka4EBryXGWPKgEoRGRqcNfUT4F0rA1VKRQ+bzUZ6errVYcQEq6bcXiIipcCZwAwRmQ1gjCkC3gDWAbOAW40xvuDTbgZeJjA4vgWYGfHAlVIqxsmRqWqtVUFBgSksLLQ6DKWUalFEZLkxpuCb7dHWPaWUUiqKadJQSikVMk0aSimlQqZJQymlVMg0aSillApZq589JSLlwHar42glsoB9Vgeh1FHo32fz6myM+VZJjVafNFTzEZHCxqbgKRUN9O8zMrR7SimlVMg0aSillAqZJg11Il60OgCljkH/PiNAxzSUUkqFTK80lFJKhUyThlJKqZBp0lAhEZExIrJRRIpFZKLV8Sh1hIi8IiJ7RWSt1bHEAk0a6rhExA48B1wA9AV+JCJ9rY1Kqa/8DRhjdRCxQpOGCsUQoNgYU2KMcQPTgGPt9a5UxBhjFgD7rY4jVmjSUKHoAOxscL802KaUijGaNFQopJE2nautVAzSpKFCUQp0bHA/D9htUSxKKQtp0lCh+BzoKSJdRcQJXAFMtzgmpZQFNGmo4zLGeIHbgNnAeuANY0yRtVEpFSAi/wKWAKeISKmIXG91TK2ZlhFRSikVMr3SUEopFTJNGkoppUKmSUMppVTINGkopZQKmSYNpZRSIdOkoVQzEpGq4zze5USrsYrI30Tk0qZFplTz0KShlFIqZJo0lAoDEUkWkbkiskJE1ohIw6rADhGZKiKrReRNEUkMPmewiMwXkeUiMltEci0KX6mj0qShVHjUAZcYY04DzgH+JCJHCj+eArxojBkAHAZuEZE44M/ApcaYwcArwCMWxK3UMTmsDkCpVkqAR0XkbMBPoJR8TvCxncaYRcHj14A7gFlAf2BOMLfYgbKIRqxUCDRpKBUePwaygcHGGI+IbAPig499s3aPIZBkiowxZ0YuRKVOnHZPKRUeacDeYMI4B+jc4LFOInIkOfwI+BTYCGQfaReROBHpF9GIlQqBJg2lwuN1oEBECglcdWxo8Nh6YIKIrAYygL8Et9G9FHhcRFYBK4FhkQ1ZqePTKrdKKaVCplcaSimlQqZJQymlVMg0aSillAqZJg2llFIh06ShlFIqZJo0lFJKhUyThlJKqZD9PxZCQFtuBMv7AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.violinplot(x= 'label',y= 'width',data=train) # 参数data为dataframe或者数组格式的数据；x和y分别为绘制的x轴和y轴的特征。\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "15b0ff7a",
   "metadata": {},
   "source": [
    "横坐标为label，有两个取值，即0和1；纵坐标为width，小提琴图两边是对称的。  \n",
    "可以看出样本在特征width上的分布。  \n",
    "可以看到，特征width在正负样本上的分布的差别还是很大的，  \n",
    "因此可以推测该特征可能是一个对模型较为有用的特征。  \n",
    "同理，可以绘制出特征height和特征ratio在正负样本上的分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "5808536a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.violinplot(x= 'label',y= 'height',data=train) \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "f338ea5d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.violinplot(x= 'label',y= 'ratio(width/height)',data=train) \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5afb0d5b",
   "metadata": {},
   "source": [
    "这些连续型特征彼此之间是否具有相关性，此处通过皮尔逊（Pearson）系数来度量两个特征之间的相关性。皮尔逊相关系数为两个变量之间的协方差和标准差的商，取值范围为（-1～+1）。估算样本的协方差和标准差，可得到皮尔逊相关系数。  \n",
    "式中，n是样本数量；xi和yi表示第i个样本的不同变量；x和y表示两个变量的均值。  \n",
    "pandas提供的corr方法可以方便地计算列之间的皮尔逊相关系数，pandas也提供了kendall和spearman相关系数的计算，根据需要进行选择。 "
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "id": "61d04234",
   "metadata": {},
   "source": [
    "![image.png](attachment:image.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2a042882",
   "metadata": {},
   "source": [
    "通过seaborn库中的heatmap来绘制皮尔逊相关系数的热点图  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "60aa308f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.subplots(figsize = (12,6))\n",
    "corr_mat = train[cont_feas].corr()\n",
    "sns.heatmap(corr_mat,annot = True)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ba4e2ce8",
   "metadata": {},
   "source": [
    "# 训练集、测试集分布比较\n",
    "采用机器学习算法来检验训练集和测试集是否有明显区别。  \n",
    "理想情况下，对于来自相同分布的训练集和测试集，训练的分类器区分情况应与随机差不多，即AUC应为0.5左右。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2bb66a0e",
   "metadata": {},
   "source": [
    "训练集和测试集样本进行混合。将训练集和测试集的原label字段丢弃。  \n",
    "新增一列字段作为训练集和测试集的label特征。label字段为1表示训练集，为0表示测试集。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "104de551",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 丢弃原label特征\n",
    "train_d = train.drop(['label'], axis =1 ).dropna()\n",
    "test_d = test.drop(['label'], axis =1 ).dropna()\n",
    "# 定义新label，区分训练集与测试集样本\n",
    "train_d['label'] = 1\n",
    "test_d['label'] = 0\n",
    "# 训练集+测试集合并\n",
    "all_data = pd.concat((train_d,test_d))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "95691a9f",
   "metadata": {},
   "source": [
    "处理完毕后，将所有数据的顺序随机打乱，重新创建新的训练集和测试集，此处训练集样本数设定为总样本数的1/2。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "762fbfe7",
   "metadata": {},
   "outputs": [],
   "source": [
    "all_data = all_data.iloc[np.random.permutation(len(all_data))]\n",
    "all_data.reset_index(drop = True,inplace = True)\n",
    "x = all_data.drop(['label'],axis = 1)\n",
    "y = all_data.label\n",
    "train_size = 1200\n",
    "x_train = x[:train_size]\n",
    "x_test = x[train_size:]\n",
    "y_train = y[:train_size]\n",
    "y_test = y[train_size:]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6d5d5520",
   "metadata": {},
   "source": [
    "### 通过分类模型检验\n",
    "生成新的训练集和测试集后，即可拟合分类模型了，选取逻辑回归和决策树这两种模型作为分类器，分别拟合新生成的训练集，对新测试集进行预测，最后计算预测结果的AUC。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "fbefc09e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "逻辑回归 AUC:0.4880\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:763: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
      "\n",
      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
      "Please also refer to the documentation for alternative solver options:\n",
      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
      "  n_iter_i = _check_optimize_result(\n"
     ]
    }
   ],
   "source": [
    "# 逻辑回归\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "clf = LogisticRegression()\n",
    "clf.fit(x_train,y_train)\n",
    "pred = clf.predict_proba(x_test)[:,1]\n",
    "auc = roc_auc_score(y_test,pred)\n",
    "print(\"逻辑回归 AUC:%.4f\"%(auc))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "aae2e4c5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "决策树 AUC:0.4961\n"
     ]
    }
   ],
   "source": [
    "# 决策树\n",
    "from sklearn import tree\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "clf = tree.DecisionTreeClassifier(max_depth=4)\n",
    "clf.fit(x_train,y_train)\n",
    "pred = clf.predict_proba(x_test)[:,1]\n",
    "auc = roc_auc_score(y_test,pred)\n",
    "print(\"决策树 AUC:%.4f\"%(auc))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cce60dbd",
   "metadata": {},
   "source": [
    "通过逻辑回归和决策树拟合后的模型对新测试集进行预测，得到的预测结果AUC均接近于0.5，说明原始训练集和测试集的分布是基本相同的。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e4c1517d",
   "metadata": {},
   "source": [
    "### 通过交叉验证检验\n",
    "也可以对整个数据集进行交叉验证，即通过交叉验证来划分训练集和测试集（而非人工随机划分）来进行测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "9383bce6",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:763: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
      "\n",
      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
      "Please also refer to the documentation for alternative solver options:\n",
      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
      "  n_iter_i = _check_optimize_result(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC 均值： 0.51,标准差：0.00 \n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:763: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
      "\n",
      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
      "Please also refer to the documentation for alternative solver options:\n",
      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
      "  n_iter_i = _check_optimize_result(\n"
     ]
    }
   ],
   "source": [
    "# 交叉验证\n",
    "from sklearn.model_selection import cross_val_score\n",
    "scores = cross_val_score(LogisticRegression(),x,y,scoring = 'roc_auc',cv=2)\n",
    "print(\"AUC 均值： %.2f,标准差：%.2f \\n\"%(scores.mean(),scores.std()))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5056d36a",
   "metadata": {},
   "source": [
    "### 通过PCA降维检验\n",
    "通过PCA对训练集和测试集的集合数据进行降维（降到二维或三维），然后对降维后的数据进行可视化，观察训练集和测试集数据分布是否具有明显差别。  \n",
    "将合并数据集特征映射到二维平面上，并将其可视化。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "d4a3acd7",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:238: RuntimeWarning: Glyph 20803 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:238: RuntimeWarning: Glyph 32032 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:201: RuntimeWarning: Glyph 20803 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:201: RuntimeWarning: Glyph 32032 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.decomposition import PCA\n",
    "all_data = all_data.iloc[np.random.permutation(len(all_data))]\n",
    "X = all_data.iloc[:,:1557]\n",
    "y = all_data.iloc[:,1557:]\n",
    "pca = PCA(n_components=2)\n",
    "X_pca = pca.fit_transform(X)\n",
    "# 得到正负样本集\n",
    "label = all_data.label\n",
    "pos_mask = label >= 0.5\n",
    "neg_mask = label < 0.5\n",
    "pos = X_pca[pos_mask]\n",
    "neg = X_pca[neg_mask]\n",
    "# 可视化\n",
    "plt.scatter(pos[:,0],pos[:,1],s=60,marker='o',c='r')\n",
    "plt.scatter(pos[:,0],pos[:,1],s=60,marker='^',c='b')\n",
    "plt.title(u'元素 1')\n",
    "plt.title(u'元素 2')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "86b43442",
   "metadata": {},
   "source": [
    "### 平衡正负样本\n",
    "该数据集中的正负样本十分不均衡，需要平衡正负样本的权重和。XGBoost可通过设置参数scale_pos_weight平衡正负样本的权重。若训练数据集样本之间无权重高低之分，则直接可以以负样本数/正样本数作为参数scale_pos_weight值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "eb7ec0d6",
   "metadata": {},
   "outputs": [],
   "source": [
    "pos_num = len(train[train['label'] == 1 ])\n",
    "neg_num = len(train[train['label'] == 0 ])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "d252f050",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "368"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pos_num"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "cb507642",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2302"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "neg_num"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "49a06b86",
   "metadata": {},
   "source": [
    "### 训练参数定义\n",
    "按照经验为模型指定一个初始版本的参数，以此训练一个基准模型。  \n",
    "本项目为一个二分类任务，因此objective采用binary:logistic，评估函数采用auc。  \n",
    "学习率eta设置为0.1，max_depth设置为6，模型迭代轮数为50轮，scale_pos_weight采用上述统计的neg_num/pos_num。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "01bcaa63",
   "metadata": {},
   "outputs": [],
   "source": [
    "params = {\n",
    "    \"objective\":\"binary:logistic\",\n",
    "    \"booster\":\"gbtree\",\n",
    "    \"eta\":0.1,\n",
    "    \"eval_metric\":\"auc\",\n",
    "    \"scale_pos_weight\":neg_num / pos_num,\n",
    "    \"max_depth\":6\n",
    "}\n",
    "num_round = 50"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e50ead87",
   "metadata": {},
   "source": [
    "### 模型训练"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "145ad2cb",
   "metadata": {},
   "source": [
    "通过数据集构造满足XGBoost输入的DMatrix，然后通过上述定义的模型参数训练模型，设置模型训练过程中的监控列表watchlist，监控训练集和测试集在训练过程中的AUC指标。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "07332f4f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0]\ttrain-auc:0.94686\ttest-auc:0.88627\n",
      "[1]\ttrain-auc:0.94773\ttest-auc:0.88732\n",
      "[2]\ttrain-auc:0.95294\ttest-auc:0.89258\n",
      "[3]\ttrain-auc:0.95302\ttest-auc:0.89212\n",
      "[4]\ttrain-auc:0.95357\ttest-auc:0.89268\n",
      "[5]\ttrain-auc:0.95370\ttest-auc:0.89284\n",
      "[6]\ttrain-auc:0.95371\ttest-auc:0.89282\n",
      "[7]\ttrain-auc:0.95384\ttest-auc:0.89331\n",
      "[8]\ttrain-auc:0.95767\ttest-auc:0.90388\n",
      "[9]\ttrain-auc:0.96020\ttest-auc:0.90395\n",
      "[10]\ttrain-auc:0.96395\ttest-auc:0.90895\n",
      "[11]\ttrain-auc:0.96394\ttest-auc:0.90845\n",
      "[12]\ttrain-auc:0.96393\ttest-auc:0.90850\n",
      "[13]\ttrain-auc:0.96392\ttest-auc:0.90850\n",
      "[14]\ttrain-auc:0.96653\ttest-auc:0.90835\n",
      "[15]\ttrain-auc:0.96919\ttest-auc:0.92863\n",
      "[16]\ttrain-auc:0.97890\ttest-auc:0.93191\n",
      "[17]\ttrain-auc:0.98008\ttest-auc:0.93217\n",
      "[18]\ttrain-auc:0.98025\ttest-auc:0.93257\n",
      "[19]\ttrain-auc:0.98041\ttest-auc:0.93274\n",
      "[20]\ttrain-auc:0.98057\ttest-auc:0.93297\n",
      "[21]\ttrain-auc:0.99062\ttest-auc:0.93967\n",
      "[22]\ttrain-auc:0.99066\ttest-auc:0.93973\n",
      "[23]\ttrain-auc:0.99065\ttest-auc:0.94038\n",
      "[24]\ttrain-auc:0.99179\ttest-auc:0.93891\n",
      "[25]\ttrain-auc:0.99182\ttest-auc:0.93899\n",
      "[26]\ttrain-auc:0.99303\ttest-auc:0.94271\n",
      "[27]\ttrain-auc:0.99316\ttest-auc:0.94406\n",
      "[28]\ttrain-auc:0.99352\ttest-auc:0.94383\n",
      "[29]\ttrain-auc:0.99383\ttest-auc:0.94516\n",
      "[30]\ttrain-auc:0.99383\ttest-auc:0.94670\n",
      "[31]\ttrain-auc:0.99404\ttest-auc:0.94604\n",
      "[32]\ttrain-auc:0.99419\ttest-auc:0.94690\n",
      "[33]\ttrain-auc:0.99474\ttest-auc:0.94835\n",
      "[34]\ttrain-auc:0.99467\ttest-auc:0.94892\n",
      "[35]\ttrain-auc:0.99479\ttest-auc:0.94879\n",
      "[36]\ttrain-auc:0.99502\ttest-auc:0.94902\n",
      "[37]\ttrain-auc:0.99573\ttest-auc:0.95645\n",
      "[38]\ttrain-auc:0.99627\ttest-auc:0.95609\n",
      "[39]\ttrain-auc:0.99652\ttest-auc:0.96356\n",
      "[40]\ttrain-auc:0.99656\ttest-auc:0.96352\n",
      "[41]\ttrain-auc:0.99674\ttest-auc:0.96386\n",
      "[42]\ttrain-auc:0.99726\ttest-auc:0.96405\n",
      "[43]\ttrain-auc:0.99753\ttest-auc:0.96365\n",
      "[44]\ttrain-auc:0.99787\ttest-auc:0.96427\n",
      "[45]\ttrain-auc:0.99792\ttest-auc:0.96447\n",
      "[46]\ttrain-auc:0.99816\ttest-auc:0.96634\n",
      "[47]\ttrain-auc:0.99819\ttest-auc:0.96646\n",
      "[48]\ttrain-auc:0.99823\ttest-auc:0.96681\n",
      "[49]\ttrain-auc:0.99838\ttest-auc:0.96702\n",
      "[50]\ttrain-auc:0.99842\ttest-auc:0.96687\n",
      "[51]\ttrain-auc:0.99858\ttest-auc:0.96689\n",
      "[52]\ttrain-auc:0.99865\ttest-auc:0.96687\n",
      "[53]\ttrain-auc:0.99878\ttest-auc:0.96713\n",
      "[54]\ttrain-auc:0.99881\ttest-auc:0.96721\n",
      "[55]\ttrain-auc:0.99888\ttest-auc:0.96713\n",
      "[56]\ttrain-auc:0.99889\ttest-auc:0.96738\n",
      "[57]\ttrain-auc:0.99894\ttest-auc:0.96717\n",
      "[58]\ttrain-auc:0.99901\ttest-auc:0.96742\n",
      "[59]\ttrain-auc:0.99903\ttest-auc:0.96752\n",
      "[60]\ttrain-auc:0.99904\ttest-auc:0.96739\n",
      "[61]\ttrain-auc:0.99906\ttest-auc:0.96746\n",
      "[62]\ttrain-auc:0.99907\ttest-auc:0.96831\n",
      "[63]\ttrain-auc:0.99909\ttest-auc:0.96831\n",
      "[64]\ttrain-auc:0.99914\ttest-auc:0.96754\n",
      "[65]\ttrain-auc:0.99921\ttest-auc:0.96790\n",
      "[66]\ttrain-auc:0.99922\ttest-auc:0.96784\n",
      "[67]\ttrain-auc:0.99923\ttest-auc:0.96849\n",
      "[68]\ttrain-auc:0.99924\ttest-auc:0.96853\n",
      "[69]\ttrain-auc:0.99928\ttest-auc:0.96923\n",
      "[70]\ttrain-auc:0.99930\ttest-auc:0.96942\n",
      "[71]\ttrain-auc:0.99933\ttest-auc:0.96936\n",
      "[72]\ttrain-auc:0.99933\ttest-auc:0.96955\n",
      "[73]\ttrain-auc:0.99936\ttest-auc:0.97035\n",
      "[74]\ttrain-auc:0.99937\ttest-auc:0.97037\n",
      "[75]\ttrain-auc:0.99938\ttest-auc:0.97161\n",
      "[76]\ttrain-auc:0.99938\ttest-auc:0.97161\n",
      "[77]\ttrain-auc:0.99940\ttest-auc:0.97256\n",
      "[78]\ttrain-auc:0.99941\ttest-auc:0.97251\n",
      "[79]\ttrain-auc:0.99943\ttest-auc:0.97251\n",
      "[80]\ttrain-auc:0.99945\ttest-auc:0.97255\n",
      "[81]\ttrain-auc:0.99946\ttest-auc:0.97257\n",
      "[82]\ttrain-auc:0.99947\ttest-auc:0.97299\n",
      "[83]\ttrain-auc:0.99948\ttest-auc:0.97272\n",
      "[84]\ttrain-auc:0.99950\ttest-auc:0.97278\n",
      "[85]\ttrain-auc:0.99951\ttest-auc:0.97276\n",
      "[86]\ttrain-auc:0.99951\ttest-auc:0.97278\n",
      "[87]\ttrain-auc:0.99952\ttest-auc:0.97304\n",
      "[88]\ttrain-auc:0.99952\ttest-auc:0.97338\n",
      "[89]\ttrain-auc:0.99953\ttest-auc:0.97329\n",
      "[90]\ttrain-auc:0.99955\ttest-auc:0.97314\n",
      "[91]\ttrain-auc:0.99955\ttest-auc:0.97280\n",
      "[92]\ttrain-auc:0.99957\ttest-auc:0.97321\n",
      "[93]\ttrain-auc:0.99957\ttest-auc:0.97325\n",
      "[94]\ttrain-auc:0.99959\ttest-auc:0.97293\n",
      "[95]\ttrain-auc:0.99960\ttest-auc:0.97259\n",
      "[96]\ttrain-auc:0.99961\ttest-auc:0.97255\n",
      "[97]\ttrain-auc:0.99961\ttest-auc:0.97244\n",
      "[98]\ttrain-auc:0.99962\ttest-auc:0.97274\n",
      "[99]\ttrain-auc:0.99962\ttest-auc:0.97274\n"
     ]
    }
   ],
   "source": [
    "import xgboost as xgb\n",
    "xgb_train = xgb.DMatrix(train.iloc[:,:1557],train['label'])\n",
    "xgb_test = xgb.DMatrix(test.iloc[:,:1557],test['label'])\n",
    "params = {\n",
    "    \"objective\":\"binary:logistic\",\n",
    "    \"booster\":\"gbtree\",\n",
    "    \"eta\":0.1,\n",
    "    \"eval_metric\":\"auc\",\n",
    "    \"scale_pos_weight\":neg_num / pos_num,\n",
    "    \"max_depth\":6\n",
    "}\n",
    "num_round = 100\n",
    "watchlist = [(xgb_train,'train'),(xgb_test,'test')]\n",
    "model = xgb.train(params,xgb_train,num_round,watchlist)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8543698c",
   "metadata": {},
   "source": [
    "训练完成后，保存模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "5f2e7f56",
   "metadata": {},
   "outputs": [],
   "source": [
    "model.save_model(\"./model.dat\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "f4dfe72e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC 得分： 0.972740\n"
     ]
    }
   ],
   "source": [
    "y_pred = model.predict(xgb_test)\n",
    "# AUC评估预测效果\n",
    "auc = roc_auc_score(test.label,y_pred)\n",
    "print(\"AUC 得分： %f\" % auc)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6c96b75d",
   "metadata": {},
   "source": [
    "模型对测试集预测结果的AUC约为0.972740"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3d54d7c6",
   "metadata": {},
   "source": [
    "### 特征重要性排名\n",
    "模型训练完毕后，可以通过plot_importance来得到可视化的特征重要性排名，此处选择排名前20的特征。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "918694d3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "xgb.plot_importance(model,max_num_features=20,height=0.5)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "887de027",
   "metadata": {},
   "source": [
    "3个连续型特征排名最高（分裂特征）"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5f524d61",
   "metadata": {},
   "source": [
    "到此，项目结束"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "059a4294",
   "metadata": {},
   "source": [
    "### 超参数调优\n",
    "通过自定义模型参数得到了一个基准模型。    \n",
    "上述模型的参数均是根据经验人工设定的，因此该模型显然并非最优模型。  \n",
    "通过超参数调优来优化上述模型，采用的优化方法为贝叶斯优化法。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3a538e85",
   "metadata": {},
   "source": [
    "BayesianOptimization包是基于函数优化的,首先定义优化函数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "ce7a8403",
   "metadata": {},
   "outputs": [],
   "source": [
    "def xgb_optimize(learning_rate, n_estimators,  min_child_weight,  colsample_bytree,  max_depth,  subsample,   gamma,  alpha):  \n",
    "    params={} \n",
    "    params['learning_rate'] = float(learning_rate)  \n",
    "    params['min_child_weight'] = int(min_child_weight)  \n",
    "    params['cosample_bytree'] = max(min(colsample_bytree, 1), 0)  \n",
    "    params['max_depth'] = int(max_depth)  \n",
    "    params['subsample'] = max(min(subsample, 1), 0)  \n",
    "    params['gamma'] = max(gamma, 0)  \n",
    "    params['alpha'] = max(alpha, 0)  \n",
    "    params['objective'] = 'binary:logistic'  \n",
    "    cv_result = xgb.cv(params, xgb_train, num_boost_round=int(n_estimators), nfold=5, seed=10, metrics=['auc'],  early_stopping_rounds=10)  \n",
    "    return cv_result['test-auc-mean'].iloc[-1]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3d8927b2",
   "metadata": {},
   "source": [
    "优化函数中的learning_rate、cosample_bytree、subsample、gamma、alpha为浮点型的连续值，min_child_weight、max_depth为整型的离散值，objective为固定值binary:logistic。  \n",
    "优化函数完成定义后，即可指定贝叶斯优化的参数范围。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "84879270",
   "metadata": {},
   "outputs": [],
   "source": [
    "pbounds = {  \n",
    "            'learning_rate': (0.05, 0.5),  \n",
    "            'n_estimators': (50, 200),      \n",
    "            'min_child_weight': (1, 10),               \n",
    "            'colsample_bytree': (0.5, 1),  \n",
    "            'max_depth': (4, 10),  \n",
    "            'subsample': (0.5, 1),  \n",
    "            'gamma': (0, 10),  \n",
    "            'alpha': (0, 10)\n",
    "          }  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "b280d515",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "|   iter    |  target   |   alpha   | colsam... |   gamma   | learni... | max_depth | min_ch... | n_esti... | subsample |\n",
      "-------------------------------------------------------------------------------------------------------------------------\n",
      "[17:20:23] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:20:23] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:20:23] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:20:23] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:20:23] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 1       \u001b[0m | \u001b[0m 0.9656  \u001b[0m | \u001b[0m 0.0287  \u001b[0m | \u001b[0m 0.9087  \u001b[0m | \u001b[0m 8.88    \u001b[0m | \u001b[0m 0.2582  \u001b[0m | \u001b[0m 5.208   \u001b[0m | \u001b[0m 4.415   \u001b[0m | \u001b[0m 182.0   \u001b[0m | \u001b[0m 0.9302  \u001b[0m |\n",
      "[17:20:44] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:20:44] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:20:45] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:20:45] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:20:45] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 2       \u001b[0m | \u001b[0m 0.9513  \u001b[0m | \u001b[0m 6.18    \u001b[0m | \u001b[0m 0.7247  \u001b[0m | \u001b[0m 7.994   \u001b[0m | \u001b[0m 0.3851  \u001b[0m | \u001b[0m 7.446   \u001b[0m | \u001b[0m 6.874   \u001b[0m | \u001b[0m 160.2   \u001b[0m | \u001b[0m 0.8097  \u001b[0m |\n",
      "[17:20:58] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:20:58] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:20:58] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:20:59] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:20:59] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 3       \u001b[0m | \u001b[0m 0.9532  \u001b[0m | \u001b[0m 1.766   \u001b[0m | \u001b[0m 0.8484  \u001b[0m | \u001b[0m 9.155   \u001b[0m | \u001b[0m 0.2502  \u001b[0m | \u001b[0m 9.006   \u001b[0m | \u001b[0m 1.233   \u001b[0m | \u001b[0m 171.1   \u001b[0m | \u001b[0m 0.6643  \u001b[0m |\n",
      "[17:21:23] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:21:23] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:21:24] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[17:21:24] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:21:24] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 4       \u001b[0m | \u001b[0m 0.9586  \u001b[0m | \u001b[0m 0.3433  \u001b[0m | \u001b[0m 0.7108  \u001b[0m | \u001b[0m 6.332   \u001b[0m | \u001b[0m 0.4659  \u001b[0m | \u001b[0m 8.131   \u001b[0m | \u001b[0m 7.776   \u001b[0m | \u001b[0m 65.74   \u001b[0m | \u001b[0m 0.8648  \u001b[0m |\n",
      "[17:21:46] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:21:46] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:21:46] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:21:46] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:21:46] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 5       \u001b[0m | \u001b[0m 0.9479  \u001b[0m | \u001b[0m 6.733   \u001b[0m | \u001b[0m 0.7299  \u001b[0m | \u001b[0m 2.873   \u001b[0m | \u001b[0m 0.2162  \u001b[0m | \u001b[0m 4.559   \u001b[0m | \u001b[0m 9.297   \u001b[0m | \u001b[0m 51.25   \u001b[0m | \u001b[0m 0.7221  \u001b[0m |\n",
      "[17:22:02] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:22:02] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:22:02] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:22:02] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:22:02] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 6       \u001b[0m | \u001b[0m 0.9438  \u001b[0m | \u001b[0m 8.349   \u001b[0m | \u001b[0m 0.8474  \u001b[0m | \u001b[0m 4.372   \u001b[0m | \u001b[0m 0.1884  \u001b[0m | \u001b[0m 6.596   \u001b[0m | \u001b[0m 9.624   \u001b[0m | \u001b[0m 64.24   \u001b[0m | \u001b[0m 0.6871  \u001b[0m |\n",
      "[17:22:18] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:22:18] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:22:18] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:22:18] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:22:18] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 7       \u001b[0m | \u001b[0m 0.9649  \u001b[0m | \u001b[0m 6.185   \u001b[0m | \u001b[0m 0.9405  \u001b[0m | \u001b[0m 0.5539  \u001b[0m | \u001b[0m 0.4209  \u001b[0m | \u001b[0m 9.526   \u001b[0m | \u001b[0m 3.103   \u001b[0m | \u001b[0m 156.4   \u001b[0m | \u001b[0m 0.6855  \u001b[0m |\n",
      "[17:22:49] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:22:49] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[17:22:49] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:22:49] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:22:50] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 8       \u001b[0m | \u001b[0m 0.9603  \u001b[0m | \u001b[0m 3.247   \u001b[0m | \u001b[0m 0.8482  \u001b[0m | \u001b[0m 2.988   \u001b[0m | \u001b[0m 0.3975  \u001b[0m | \u001b[0m 4.553   \u001b[0m | \u001b[0m 3.692   \u001b[0m | \u001b[0m 143.5   \u001b[0m | \u001b[0m 0.6129  \u001b[0m |\n",
      "[17:23:08] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:23:08] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:23:08] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:23:08] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:23:09] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 9       \u001b[0m | \u001b[0m 0.9528  \u001b[0m | \u001b[0m 8.535   \u001b[0m | \u001b[0m 0.7759  \u001b[0m | \u001b[0m 3.254   \u001b[0m | \u001b[0m 0.3802  \u001b[0m | \u001b[0m 4.569   \u001b[0m | \u001b[0m 5.842   \u001b[0m | \u001b[0m 173.4   \u001b[0m | \u001b[0m 0.8506  \u001b[0m |\n",
      "[17:23:17] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:23:17] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:23:17] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:23:17] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:23:17] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 10      \u001b[0m | \u001b[0m 0.948   \u001b[0m | \u001b[0m 1.986   \u001b[0m | \u001b[0m 0.5651  \u001b[0m | \u001b[0m 2.217   \u001b[0m | \u001b[0m 0.05459 \u001b[0m | \u001b[0m 7.009   \u001b[0m | \u001b[0m 8.215   \u001b[0m | \u001b[0m 76.7    \u001b[0m | \u001b[0m 0.6038  \u001b[0m |\n",
      "[17:23:49] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:23:49] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:23:49] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:23:49] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:23:49] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "| \u001b[0m 11      \u001b[0m | \u001b[0m 0.9523  \u001b[0m | \u001b[0m 6.967   \u001b[0m | \u001b[0m 0.9594  \u001b[0m | \u001b[0m 1.726   \u001b[0m | \u001b[0m 0.1904  \u001b[0m | \u001b[0m 7.559   \u001b[0m | \u001b[0m 8.904   \u001b[0m | \u001b[0m 121.8   \u001b[0m | \u001b[0m 0.8302  \u001b[0m |\n",
      "[17:24:02] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:24:02] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:24:02] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:24:02] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:24:03] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 12      \u001b[0m | \u001b[0m 0.951   \u001b[0m | \u001b[0m 8.176   \u001b[0m | \u001b[0m 0.7407  \u001b[0m | \u001b[0m 7.145   \u001b[0m | \u001b[0m 0.07719 \u001b[0m | \u001b[0m 6.516   \u001b[0m | \u001b[0m 5.146   \u001b[0m | \u001b[0m 171.7   \u001b[0m | \u001b[0m 0.8351  \u001b[0m |\n",
      "[17:24:31] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:24:31] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:24:31] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:24:32] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:24:32] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 13      \u001b[0m | \u001b[0m 0.9568  \u001b[0m | \u001b[0m 0.1699  \u001b[0m | \u001b[0m 0.7847  \u001b[0m | \u001b[0m 9.882   \u001b[0m | \u001b[0m 0.2752  \u001b[0m | \u001b[0m 6.591   \u001b[0m | \u001b[0m 4.293   \u001b[0m | \u001b[0m 183.5   \u001b[0m | \u001b[0m 0.7892  \u001b[0m |\n",
      "[17:24:44] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:24:44] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:24:45] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:24:45] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:24:45] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 14      \u001b[0m | \u001b[0m 0.9584  \u001b[0m | \u001b[0m 1.267   \u001b[0m | \u001b[0m 0.9711  \u001b[0m | \u001b[0m 8.283   \u001b[0m | \u001b[0m 0.4787  \u001b[0m | \u001b[0m 4.762   \u001b[0m | \u001b[0m 4.809   \u001b[0m | \u001b[0m 182.5   \u001b[0m | \u001b[0m 0.9869  \u001b[0m |\n",
      "[17:24:54] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:24:54] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:24:54] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[17:24:54] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:24:54] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 15      \u001b[0m | \u001b[0m 0.9605  \u001b[0m | \u001b[0m 0.6626  \u001b[0m | \u001b[0m 0.8105  \u001b[0m | \u001b[0m 8.991   \u001b[0m | \u001b[0m 0.4342  \u001b[0m | \u001b[0m 6.233   \u001b[0m | \u001b[0m 4.829   \u001b[0m | \u001b[0m 180.9   \u001b[0m | \u001b[0m 0.673   \u001b[0m |\n",
      "[17:25:15] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:25:15] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:25:15] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:25:15] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:25:15] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[95m 16      \u001b[0m | \u001b[95m 0.9694  \u001b[0m | \u001b[95m 6.127   \u001b[0m | \u001b[95m 0.6904  \u001b[0m | \u001b[95m 0.1521  \u001b[0m | \u001b[95m 0.1182  \u001b[0m | \u001b[95m 9.721   \u001b[0m | \u001b[95m 1.139   \u001b[0m | \u001b[95m 156.2   \u001b[0m | \u001b[95m 0.8613  \u001b[0m |\n",
      "[17:25:56] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:25:56] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:25:56] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:25:56] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:25:56] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 17      \u001b[0m | \u001b[0m 0.9643  \u001b[0m | \u001b[0m 5.754   \u001b[0m | \u001b[0m 0.5624  \u001b[0m | \u001b[0m 1.956   \u001b[0m | \u001b[0m 0.1772  \u001b[0m | \u001b[0m 8.919   \u001b[0m | \u001b[0m 2.347   \u001b[0m | \u001b[0m 154.4   \u001b[0m | \u001b[0m 0.7665  \u001b[0m |\n",
      "[17:26:28] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:26:28] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:26:29] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:26:29] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:26:29] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[95m 18      \u001b[0m | \u001b[95m 0.9718  \u001b[0m | \u001b[95m 3.968   \u001b[0m | \u001b[95m 1.0     \u001b[0m | \u001b[95m 0.0     \u001b[0m | \u001b[95m 0.07349 \u001b[0m | \u001b[95m 10.0    \u001b[0m | \u001b[95m 1.015   \u001b[0m | \u001b[95m 155.6   \u001b[0m | \u001b[95m 1.0     \u001b[0m |\n",
      "[17:27:58] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:27:58] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[17:27:58] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:27:58] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:27:58] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[95m 19      \u001b[0m | \u001b[95m 0.9727  \u001b[0m | \u001b[95m 3.955   \u001b[0m | \u001b[95m 0.8778  \u001b[0m | \u001b[95m 0.617   \u001b[0m | \u001b[95m 0.2366  \u001b[0m | \u001b[95m 7.581   \u001b[0m | \u001b[95m 1.251   \u001b[0m | \u001b[95m 156.2   \u001b[0m | \u001b[95m 0.6529  \u001b[0m |\n",
      "[17:28:27] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:28:27] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:28:27] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:28:27] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:28:27] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 20      \u001b[0m | \u001b[0m 0.9434  \u001b[0m | \u001b[0m 2.636   \u001b[0m | \u001b[0m 0.5     \u001b[0m | \u001b[0m 0.0     \u001b[0m | \u001b[0m 0.05    \u001b[0m | \u001b[0m 9.074   \u001b[0m | \u001b[0m 1.0     \u001b[0m | \u001b[0m 158.8   \u001b[0m | \u001b[0m 1.0     \u001b[0m |\n",
      "[17:28:48] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:28:48] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:28:49] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:28:49] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:28:49] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 21      \u001b[0m | \u001b[0m 0.967   \u001b[0m | \u001b[0m 4.35    \u001b[0m | \u001b[0m 0.8332  \u001b[0m | \u001b[0m 0.6712  \u001b[0m | \u001b[0m 0.378   \u001b[0m | \u001b[0m 6.347   \u001b[0m | \u001b[0m 1.306   \u001b[0m | \u001b[0m 155.7   \u001b[0m | \u001b[0m 0.9923  \u001b[0m |\n",
      "[17:29:01] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:29:01] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:29:01] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:29:01] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:29:01] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "| \u001b[0m 22      \u001b[0m | \u001b[0m 0.972   \u001b[0m | \u001b[0m 2.144   \u001b[0m | \u001b[0m 0.9887  \u001b[0m | \u001b[0m 1.448   \u001b[0m | \u001b[0m 0.1232  \u001b[0m | \u001b[0m 8.492   \u001b[0m | \u001b[0m 1.981   \u001b[0m | \u001b[0m 154.6   \u001b[0m | \u001b[0m 0.8853  \u001b[0m |\n",
      "[17:29:44] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:29:44] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:29:44] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:29:45] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:29:45] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 23      \u001b[0m | \u001b[0m 0.9578  \u001b[0m | \u001b[0m 3.778   \u001b[0m | \u001b[0m 1.0     \u001b[0m | \u001b[0m 0.0     \u001b[0m | \u001b[0m 0.05    \u001b[0m | \u001b[0m 8.349   \u001b[0m | \u001b[0m 1.0     \u001b[0m | \u001b[0m 154.2   \u001b[0m | \u001b[0m 0.5     \u001b[0m |\n",
      "[17:30:03] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:30:03] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:30:03] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:30:03] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:30:03] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 24      \u001b[0m | \u001b[0m 0.9634  \u001b[0m | \u001b[0m 3.73    \u001b[0m | \u001b[0m 1.0     \u001b[0m | \u001b[0m 1.665   \u001b[0m | \u001b[0m 0.4007  \u001b[0m | \u001b[0m 8.985   \u001b[0m | \u001b[0m 1.829   \u001b[0m | \u001b[0m 155.8   \u001b[0m | \u001b[0m 1.0     \u001b[0m |\n",
      "[17:30:12] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:30:12] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:30:13] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:30:13] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:30:13] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 25      \u001b[0m | \u001b[0m 0.9717  \u001b[0m | \u001b[0m 2.165   \u001b[0m | \u001b[0m 0.6934  \u001b[0m | \u001b[0m 1.329   \u001b[0m | \u001b[0m 0.3464  \u001b[0m | \u001b[0m 6.417   \u001b[0m | \u001b[0m 1.854   \u001b[0m | \u001b[0m 155.7   \u001b[0m | \u001b[0m 0.5618  \u001b[0m |\n",
      "[17:30:30] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:30:30] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:30:30] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:30:30] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[17:30:30] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[95m 26      \u001b[0m | \u001b[95m 0.973   \u001b[0m | \u001b[95m 2.553   \u001b[0m | \u001b[95m 1.0     \u001b[0m | \u001b[95m 0.4623  \u001b[0m | \u001b[95m 0.05    \u001b[0m | \u001b[95m 7.479   \u001b[0m | \u001b[95m 2.695   \u001b[0m | \u001b[95m 155.6   \u001b[0m | \u001b[95m 1.0     \u001b[0m |\n",
      "[17:31:21] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:31:21] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:31:21] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:31:21] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:31:21] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[95m 27      \u001b[0m | \u001b[95m 0.9731  \u001b[0m | \u001b[95m 0.85    \u001b[0m | \u001b[95m 0.9993  \u001b[0m | \u001b[95m 0.5574  \u001b[0m | \u001b[95m 0.2239  \u001b[0m | \u001b[95m 7.454   \u001b[0m | \u001b[95m 2.453   \u001b[0m | \u001b[95m 154.4   \u001b[0m | \u001b[95m 0.6366  \u001b[0m |\n",
      "[17:31:36] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:31:36] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:31:36] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:31:36] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:31:36] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 28      \u001b[0m | \u001b[0m 0.9727  \u001b[0m | \u001b[0m 0.8501  \u001b[0m | \u001b[0m 0.8068  \u001b[0m | \u001b[0m 2.52    \u001b[0m | \u001b[0m 0.1237  \u001b[0m | \u001b[0m 5.951   \u001b[0m | \u001b[0m 2.538   \u001b[0m | \u001b[0m 154.1   \u001b[0m | \u001b[0m 0.9114  \u001b[0m |\n",
      "[17:31:55] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:31:55] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:31:55] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:31:55] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:31:55] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 29      \u001b[0m | \u001b[0m 0.9696  \u001b[0m | \u001b[0m 2.284   \u001b[0m | \u001b[0m 0.8513  \u001b[0m | \u001b[0m 3.042   \u001b[0m | \u001b[0m 0.3102  \u001b[0m | \u001b[0m 6.956   \u001b[0m | \u001b[0m 2.132   \u001b[0m | \u001b[0m 152.6   \u001b[0m | \u001b[0m 0.9092  \u001b[0m |\n",
      "[17:32:04] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:32:05] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:32:05] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[17:32:05] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:32:05] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 30      \u001b[0m | \u001b[0m 0.9663  \u001b[0m | \u001b[0m 0.738   \u001b[0m | \u001b[0m 0.5011  \u001b[0m | \u001b[0m 2.701   \u001b[0m | \u001b[0m 0.4413  \u001b[0m | \u001b[0m 7.622   \u001b[0m | \u001b[0m 4.658   \u001b[0m | \u001b[0m 155.1   \u001b[0m | \u001b[0m 0.7058  \u001b[0m |\n",
      "[17:32:18] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:32:18] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:32:18] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:32:18] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:32:18] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 31      \u001b[0m | \u001b[0m 0.9699  \u001b[0m | \u001b[0m 0.7103  \u001b[0m | \u001b[0m 0.5629  \u001b[0m | \u001b[0m 2.475   \u001b[0m | \u001b[0m 0.3702  \u001b[0m | \u001b[0m 7.459   \u001b[0m | \u001b[0m 1.872   \u001b[0m | \u001b[0m 152.5   \u001b[0m | \u001b[0m 0.83    \u001b[0m |\n",
      "[17:32:27] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:32:27] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:32:27] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:32:27] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:32:27] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 32      \u001b[0m | \u001b[0m 0.9679  \u001b[0m | \u001b[0m 0.2078  \u001b[0m | \u001b[0m 1.0     \u001b[0m | \u001b[0m 2.543   \u001b[0m | \u001b[0m 0.05    \u001b[0m | \u001b[0m 7.661   \u001b[0m | \u001b[0m 1.44    \u001b[0m | \u001b[0m 155.1   \u001b[0m | \u001b[0m 1.0     \u001b[0m |\n",
      "[17:32:57] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:32:57] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:32:57] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:32:57] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:32:57] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[0m 33      \u001b[0m | \u001b[0m 0.936   \u001b[0m | \u001b[0m 2.088   \u001b[0m | \u001b[0m 1.0     \u001b[0m | \u001b[0m 1.135   \u001b[0m | \u001b[0m 0.05    \u001b[0m | \u001b[0m 6.503   \u001b[0m | \u001b[0m 3.907   \u001b[0m | \u001b[0m 153.6   \u001b[0m | \u001b[0m 1.0     \u001b[0m |\n",
      "[17:33:06] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:33:06] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:33:06] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:33:06] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:33:06] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "| \u001b[0m 34      \u001b[0m | \u001b[0m 0.9663  \u001b[0m | \u001b[0m 0.4458  \u001b[0m | \u001b[0m 0.9147  \u001b[0m | \u001b[0m 3.595   \u001b[0m | \u001b[0m 0.1518  \u001b[0m | \u001b[0m 4.599   \u001b[0m | \u001b[0m 2.313   \u001b[0m | \u001b[0m 154.1   \u001b[0m | \u001b[0m 0.5926  \u001b[0m |\n",
      "[17:33:17] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:33:17] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:33:17] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:33:17] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "[17:33:17] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.0/src/learner.cc:576: \n",
      "Parameters: { \"cosample_bytree\" } might not be used.\n",
      "\n",
      "  This could be a false alarm, with some parameters getting used by language bindings but\n",
      "  then being mistakenly passed down to XGBoost core, or some parameter actually being used\n",
      "  but getting flagged wrongly here. Please open an issue if you find any such cases.\n",
      "\n",
      "\n",
      "| \u001b[95m 35      \u001b[0m | \u001b[95m 0.9771  \u001b[0m | \u001b[95m 0.09488 \u001b[0m | \u001b[95m 0.5788  \u001b[0m | \u001b[95m 0.9123  \u001b[0m | \u001b[95m 0.05853 \u001b[0m | \u001b[95m 8.161   \u001b[0m | \u001b[95m 1.714   \u001b[0m | \u001b[95m 153.5   \u001b[0m | \u001b[95m 0.8561  \u001b[0m |\n",
      "=========================================================================================================================\n"
     ]
    }
   ],
   "source": [
    "xgb_opt = BayesianOptimization(xgb_optimize,pbounds)  \n",
    "xgb_opt.maximize(init_points=5,n_iter=30)  "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "64262ea6",
   "metadata": {},
   "source": [
    "此处设置初始阶段随机探索步骤数为5，贝叶斯优化迭代次数为30。也可尝试其他值，迭代次数越大，越可能探索到最优值，当然花费的时间代价会相应增大。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9cc8b6ad",
   "metadata": {},
   "source": [
    "用贝叶斯优化的参数训练XGBoost模型，并对测试集进行预测。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "db8a3d68",
   "metadata": {},
   "source": [
    " alpha   | colsam... |   gamma   | learni... | max_depth | min_ch... | n_esti... | subsample \n",
    " \n",
    "0.09488  |  0.5788   |     0.9123  |   0.05853   |   8.161     |  1.714    |     153.5   |    0.8561"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aee8ce13",
   "metadata": {},
   "source": [
    "eta即learning rate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "54437d1b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0]\ttrain-auc:0.90595\ttest-auc:0.86663\n",
      "[1]\ttrain-auc:0.95251\ttest-auc:0.91293\n",
      "[2]\ttrain-auc:0.97132\ttest-auc:0.94698\n",
      "[3]\ttrain-auc:0.97296\ttest-auc:0.94769\n",
      "[4]\ttrain-auc:0.97342\ttest-auc:0.95663\n",
      "[5]\ttrain-auc:0.97417\ttest-auc:0.95623\n",
      "[6]\ttrain-auc:0.98780\ttest-auc:0.95723\n",
      "[7]\ttrain-auc:0.98811\ttest-auc:0.95604\n",
      "[8]\ttrain-auc:0.98911\ttest-auc:0.95595\n",
      "[9]\ttrain-auc:0.98943\ttest-auc:0.95974\n",
      "[10]\ttrain-auc:0.98935\ttest-auc:0.95925\n",
      "[11]\ttrain-auc:0.98951\ttest-auc:0.95929\n",
      "[12]\ttrain-auc:0.99385\ttest-auc:0.96045\n",
      "[13]\ttrain-auc:0.99382\ttest-auc:0.96030\n",
      "[14]\ttrain-auc:0.99411\ttest-auc:0.96028\n",
      "[15]\ttrain-auc:0.99406\ttest-auc:0.95988\n",
      "[16]\ttrain-auc:0.99420\ttest-auc:0.96003\n",
      "[17]\ttrain-auc:0.99490\ttest-auc:0.96100\n",
      "[18]\ttrain-auc:0.99499\ttest-auc:0.96373\n",
      "[19]\ttrain-auc:0.99499\ttest-auc:0.96348\n",
      "[20]\ttrain-auc:0.99494\ttest-auc:0.96346\n",
      "[21]\ttrain-auc:0.99539\ttest-auc:0.96292\n",
      "[22]\ttrain-auc:0.99641\ttest-auc:0.96334\n",
      "[23]\ttrain-auc:0.99650\ttest-auc:0.96377\n",
      "[24]\ttrain-auc:0.99649\ttest-auc:0.96298\n",
      "[25]\ttrain-auc:0.99662\ttest-auc:0.96455\n",
      "[26]\ttrain-auc:0.99662\ttest-auc:0.96456\n",
      "[27]\ttrain-auc:0.99676\ttest-auc:0.96547\n",
      "[28]\ttrain-auc:0.99677\ttest-auc:0.96556\n",
      "[29]\ttrain-auc:0.99732\ttest-auc:0.97107\n",
      "[30]\ttrain-auc:0.99746\ttest-auc:0.97332\n",
      "[31]\ttrain-auc:0.99768\ttest-auc:0.97381\n",
      "[32]\ttrain-auc:0.99788\ttest-auc:0.97602\n",
      "[33]\ttrain-auc:0.99789\ttest-auc:0.97605\n",
      "[34]\ttrain-auc:0.99798\ttest-auc:0.97776\n",
      "[35]\ttrain-auc:0.99804\ttest-auc:0.97704\n",
      "[36]\ttrain-auc:0.99825\ttest-auc:0.97761\n",
      "[37]\ttrain-auc:0.99829\ttest-auc:0.97746\n",
      "[38]\ttrain-auc:0.99832\ttest-auc:0.98084\n",
      "[39]\ttrain-auc:0.99835\ttest-auc:0.98057\n",
      "[40]\ttrain-auc:0.99846\ttest-auc:0.98236\n",
      "[41]\ttrain-auc:0.99854\ttest-auc:0.98151\n",
      "[42]\ttrain-auc:0.99859\ttest-auc:0.98157\n",
      "[43]\ttrain-auc:0.99869\ttest-auc:0.98232\n",
      "[44]\ttrain-auc:0.99875\ttest-auc:0.98238\n",
      "[45]\ttrain-auc:0.99881\ttest-auc:0.98308\n",
      "[46]\ttrain-auc:0.99884\ttest-auc:0.98298\n",
      "[47]\ttrain-auc:0.99887\ttest-auc:0.98298\n",
      "[48]\ttrain-auc:0.99889\ttest-auc:0.98315\n",
      "[49]\ttrain-auc:0.99897\ttest-auc:0.98285\n",
      "[50]\ttrain-auc:0.99897\ttest-auc:0.98274\n",
      "[51]\ttrain-auc:0.99902\ttest-auc:0.98300\n",
      "[52]\ttrain-auc:0.99903\ttest-auc:0.98308\n",
      "[53]\ttrain-auc:0.99906\ttest-auc:0.98355\n",
      "[54]\ttrain-auc:0.99909\ttest-auc:0.98368\n",
      "[55]\ttrain-auc:0.99911\ttest-auc:0.98357\n",
      "[56]\ttrain-auc:0.99914\ttest-auc:0.98432\n",
      "[57]\ttrain-auc:0.99914\ttest-auc:0.98441\n",
      "[58]\ttrain-auc:0.99917\ttest-auc:0.98426\n",
      "[59]\ttrain-auc:0.99920\ttest-auc:0.98434\n",
      "[60]\ttrain-auc:0.99922\ttest-auc:0.98441\n",
      "[61]\ttrain-auc:0.99923\ttest-auc:0.98426\n",
      "[62]\ttrain-auc:0.99924\ttest-auc:0.98417\n",
      "[63]\ttrain-auc:0.99925\ttest-auc:0.98352\n",
      "[64]\ttrain-auc:0.99927\ttest-auc:0.98386\n",
      "[65]\ttrain-auc:0.99928\ttest-auc:0.98392\n",
      "[66]\ttrain-auc:0.99931\ttest-auc:0.98393\n",
      "[67]\ttrain-auc:0.99934\ttest-auc:0.98384\n",
      "[68]\ttrain-auc:0.99934\ttest-auc:0.98408\n",
      "[69]\ttrain-auc:0.99936\ttest-auc:0.98372\n",
      "[70]\ttrain-auc:0.99937\ttest-auc:0.98420\n",
      "[71]\ttrain-auc:0.99937\ttest-auc:0.98443\n",
      "[72]\ttrain-auc:0.99938\ttest-auc:0.98454\n",
      "[73]\ttrain-auc:0.99939\ttest-auc:0.98466\n",
      "[74]\ttrain-auc:0.99941\ttest-auc:0.98462\n",
      "[75]\ttrain-auc:0.99940\ttest-auc:0.98483\n",
      "[76]\ttrain-auc:0.99945\ttest-auc:0.98543\n",
      "[77]\ttrain-auc:0.99945\ttest-auc:0.98479\n",
      "[78]\ttrain-auc:0.99946\ttest-auc:0.98443\n",
      "[79]\ttrain-auc:0.99948\ttest-auc:0.98447\n",
      "[80]\ttrain-auc:0.99948\ttest-auc:0.98487\n",
      "[81]\ttrain-auc:0.99949\ttest-auc:0.98464\n",
      "[82]\ttrain-auc:0.99949\ttest-auc:0.98498\n",
      "[83]\ttrain-auc:0.99950\ttest-auc:0.98494\n",
      "[84]\ttrain-auc:0.99951\ttest-auc:0.98509\n",
      "[85]\ttrain-auc:0.99952\ttest-auc:0.98518\n",
      "[86]\ttrain-auc:0.99952\ttest-auc:0.98495\n",
      "[87]\ttrain-auc:0.99953\ttest-auc:0.98486\n",
      "[88]\ttrain-auc:0.99954\ttest-auc:0.98484\n",
      "[89]\ttrain-auc:0.99954\ttest-auc:0.98474\n",
      "[90]\ttrain-auc:0.99955\ttest-auc:0.98478\n",
      "[91]\ttrain-auc:0.99956\ttest-auc:0.98465\n",
      "[92]\ttrain-auc:0.99957\ttest-auc:0.98450\n",
      "[93]\ttrain-auc:0.99956\ttest-auc:0.98463\n",
      "[94]\ttrain-auc:0.99957\ttest-auc:0.98461\n",
      "[95]\ttrain-auc:0.99956\ttest-auc:0.98463\n",
      "[96]\ttrain-auc:0.99957\ttest-auc:0.98489\n",
      "[97]\ttrain-auc:0.99956\ttest-auc:0.98482\n",
      "[98]\ttrain-auc:0.99957\ttest-auc:0.98465\n",
      "[99]\ttrain-auc:0.99957\ttest-auc:0.98461\n",
      "AUC 得分（贝叶斯优化）：0.984609\n"
     ]
    }
   ],
   "source": [
    "bys_params = {\n",
    "    \"objective\":\"binary:logistic\",\n",
    "    \"booster\":\"gbtree\",\n",
    "    \"eta\":0.09488,\n",
    "    \"eval_metric\":\"auc\",\n",
    "    \"alpha\":0.09488,\n",
    "    \"gamma\":0.9123,\n",
    "    \"colsample_bytree\": 0.5788,\n",
    "    \"subsample\":0.8561,\n",
    "    \"scale_pos_weight\":neg_num / pos_num,\n",
    "    \"max_depth\":8,\n",
    "}\n",
    "bys_num_round = 100\n",
    "bys_model = xgb.train(bys_params,xgb_train,bys_num_round,watchlist)\n",
    "bys_y_pred = bys_model.predict(xgb_test)\n",
    "bys_auc = roc_auc_score(test.label,bys_y_pred )\n",
    "print(\"AUC 得分（贝叶斯优化）：%f\"% bys_auc)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "38ea7c0d",
   "metadata": {},
   "source": [
    "综上可以看出，测试集AUC相比基准模型有明显提升，由之前的0.972740提升到了0.984609"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
